Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NETMVC:是否可以查看请求来自何处?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NETMVC:是否可以查看请求来自何处?

Asp.net mvc ASP.NETMVC:是否可以查看请求来自何处?,asp.net-mvc,Asp.net Mvc,我不希望用户通过将url写入浏览器中的控制器来直接访问图像和媒体 我正在使用AutoHizationFilter来检查用户是否已登录并且应该有权查看图像或媒体,但是是否有方法可以查看用户是否直接通过浏览器请求控制器,或者请求是否嵌入到.cshtml或js文件中。您可以检查inrequest.UrlReferrer 不过,这并不十分可靠。您可以通过在运行时查看代码中的StackTrace来做到这一点,但这是一个代价高昂的操作,并且假设两个请求的执行路径都有足够的差异来进行确定。无法为此获得安全保护

我不希望用户通过将url写入浏览器中的控制器来直接访问图像和媒体


我正在使用AutoHizationFilter来检查用户是否已登录并且应该有权查看图像或媒体,但是是否有方法可以查看用户是否直接通过浏览器请求控制器,或者请求是否嵌入到.cshtml或js文件中。

您可以检查in
request.UrlReferrer

不过,这并不十分可靠。

您可以通过在运行时查看代码中的StackTrace来做到这一点,但这是一个代价高昂的操作,并且假设两个请求的执行路径都有足够的差异来进行确定。

无法为此获得安全保护。当使用
HttpWebRequest
或类似方法时,Referer很容易被伪造。如果你只是想保护你的图像不受普通用户的影响,而这些用户除了浏览器之外什么都不用,那么Referer就行了


另一种方法是为只能使用一次的图像生成id。您可以编写
,而不是编写
,其中
sdlkjdsjlksdlk
是您映射到会话变量中图像的ID。用于从控制器返回图像,并在返回图像时删除ID。

如果JS文件或其他文件中嵌入了链接,则没有比用户自己键入地址时更多的引用。所以我不认为这在这种特殊情况下有效。你是对的。我认为只有当图像在文档中显示为img标记时,这才有效,如果在客户端动态添加,则可能不起作用。再说一遍,这取决于浏览器,因为它负责在HTTP头中传递引用。我真的不认为有一个很好的解决这个问题的办法,所以我只能建议一些线索…对不起,但这是没有意义的。如果您想保护图像和媒体文件,也应该将它们隐藏在AuthorizationFilter后面。请注意,您将失去缓存功能,因为在这种情况下,图像URL将每次更改。