#asp.net-mvc #referrer #server-variables
#asp.net-mvc #реферер #сервер-переменные
Вопрос:
Я работаю над ASP.NET Проект MVC. У меня есть действие, которое имеет статический base64 изображения.
Я хочу, чтобы это действие отображало правильное изображение, только если оно вызывается из myproject/allowedController/allowedAction
другого, показывает другое изображение.
Я также хочу ограничить, если кто-то зарегистрировался на моем веб-сайте и напрямую открывает URL-адрес изображения, но реферер всегда возвращается как пустой.
Я пробовал с этим кодом:
string host = Request.ServerVariables["HTTP_REFERER"].ToString().Replace("http://", "").Replace("https://", "").ToLower();
//string host = Request.UrlReferrer.Host.ToString().Replace("http://", "").Replace("https://", "").ToLower();
string localPath = Request.UrlReferrer.LocalPath.ToString().ToLower();
if (host != "www.mydomain.com")
{
throw new Exception("unauthorized request code 1");
}
if (!(localPath.StartsWith("/allowedController/allowedAction")))
{
throw new Exception("unauthorized request code2");
}
Хост всегда выдает ошибку
Ссылка на объект не установлена для экземпляра объекта
Комментарии:
1. «но реферер всегда приходит пустым, я пробовал, как показано ниже» — современные веб-браузеры не будут отправлять
Referer
заголовок, если он не через TLS — и многие расширения, повышающие конфиденциальность, также блокируют отправку заголовка.2. В любом случае, вы не должны ограничивать доступ к контенту на основе
Referer
заголовка .. В конечном итоге вы взломаете свой веб-сайт для законных пользователей, а пользователи, которые хотят размещать горячие ссылки на ваш контент, в любом случае знают, как обойти эти фильтры.3. Я хочу показать другое изображение, если оно запрошено из mydomain, и другое, если запрос из другого места
4. Да, не делайте этого.
5. любой другой подход, который я должен реализовать для достижения вышеуказанного требования