我不希望用户通过在浏览器中将URL写入控制器来直接访问图像和媒体。
我正在使用Autorhizationfilter检查用户是否已登录并且应该有权查看图像或媒体,但有没有办法查看用户是通过浏览器直接请求控制器还是请求嵌入在.cshtml或js文件中。
答案 0 :(得分:2)
没有办法为此获得安全保护。使用HttpWebRequest
或类似方法时,引用者很容易被伪造。如果您只想保护您的图像免受不使用浏览器以外的任何其他用户的影响,那么Referer就可以工作。
另一种方法是为图像生成一个只能使用一次的id。您不必编写<img src="/path/to/image.png" />
,而是编写<img src="/controller/image/sdlkjdsjlksdlk" />
,其中sdlkjdsjlksdlk
是您在会话变量中映射到图像的ID。使用ImageResult
从控制器返回图像,并在返回图像时删除ID。
答案 1 :(得分:0)
您可以查看Request.UrlReferrer
中的referrer
但这不太可靠。
答案 2 :(得分:0)
您可以通过在运行时通过代码查看StackTrace来实现此目的,但这是一项代价高昂的操作,并且假设两个请求的执行路径都足够分散以进行确定。