ASP.NET MVC: проверьте, есть ли реферер из того же проекта и указанного контроллера и действия

#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. любой другой подход, который я должен реализовать для достижения вышеуказанного требования