Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 阻止直接访问IIS服务器上的文件_Asp.net Mvc_Iis_Windows Server 2012_Windows Server - Fatal编程技术网

Asp.net mvc 阻止直接访问IIS服务器上的文件

Asp.net mvc 阻止直接访问IIS服务器上的文件,asp.net-mvc,iis,windows-server-2012,windows-server,Asp.net Mvc,Iis,Windows Server 2012,Windows Server,我有两台服务器,一台用于我的mvc应用程序,另一台用于存储图像等大型文件,都运行在Windows Server 2012 R2上 如何防止直接访问存储服务器上的文件 比如说,mvc在IP1/上,而存储在IP2/上 指向文件的链接类似于:IP2/MediaFiles/2015/12/image0001.jpg 我只需要从IP1获取请求就可以访问上面的链接。怎么做 更新 IP1上的服务器1不需要文件共享,因为媒体服务器位于IP2上,我们不需要在服务器1的RAM上按请求加载文件。(服务器1将很快崩溃

我有两台服务器,一台用于我的mvc应用程序,另一台用于存储图像等大型文件,都运行在Windows Server 2012 R2上

如何防止直接访问存储服务器上的文件

比如说,mvc在
IP1/
上,而存储在
IP2/

指向文件的链接类似于:
IP2/MediaFiles/2015/12/image0001.jpg

我只需要
IP1
获取
请求就可以访问上面的链接。怎么做


更新

IP1
上的服务器1不需要文件共享,因为媒体服务器位于
IP2
上,我们不需要在服务器1的RAM上按请求加载文件。(服务器1将很快崩溃!)因此不能使用
HttpHandler


在这个问题中,我正在寻找一种方法,通过输入直接地址来防止未经授权的用户访问server2(在
IP2
)上的文件。

您想要的全部内容都在
Web.Config
文件中。如果在文件存储服务器的根目录中使用IIS,则应将其放置在该服务器的根目录中

节点中,您应该放置以下代码:

<security>
    <ipSecurity allowUnlisted="false">    <!-- this line blocks everybody, except those listed below -->                
        <clear/> <!-- removes all upstream restrictions -->
        <add ipAddress="127.0.0.1" allowed="true"/>    <!-- allow requests from the local machine -->
        <add ipAddress="IP1" allowed="true"/>   <!-- allow the specific IP of IP1  -->                             
    </ipSecurity>
</security>


如果您想了解更多有关IIS中IP黑白列表的信息。

好的,我找到了解决方案

解决这些问题需要根据您的需要从不同来源收集一些技巧。我正在寻找一种方法,以防止未经授权的用户访问文件服务器上的文件,这是不同于您的主服务器。(主服务器正在授权用户)

首先,我使用IIS规则阻止了所有包含敏感文件Url模式的传入请求。然后,我为文件服务器编写了几行代码,以使用
IHttpHandler
接口处理Http请求,以便1)检查授权规则,2)在不将文件转换为字节数组的情况下向客户端发送准确的文件。最后,我曾经美化指向文件服务器的链接!这就是所有人;)

现在:

物理链接[被阻止]
IP2/MediaFiles/2015/12/image0001.jpg


虚拟链接
IP2/Please/Find/A/File/By/DB/Id/1
-->image0001.jpg

您的意思是IP1真的提出了请求,还是图像显示在IP1提供服务的网页上?这两者之间有着巨大的差异。在第一种情况下,您可以执行以下teo建议的操作。在第二种情况下,你完全无能为力。为了让任何客户端都能够显示该图像,他们将需要访问它。@ChrisPratt关于使用MVC的故事完全与您的评论有关。客户端使用自己的
IP
而不是IP1。正如您所提到的,IP1只提供页面服务,与存储无关。我已经更新了我的问题,请检查一下。我仍然不确定我是否在跟踪你。如果要在HTML中创建指向文件服务器的锚链接或img标记,则所有可以访问该页面的用户也必须直接访问文件服务器上的文件。您不能将其限制为只能在MVC站点提供的网页上下文中查看。每个请求都被单独处理。@ChrisPratt谢谢您的评论,我已经解决了这个问题并找到了解决方案。谢谢您的回答。我想我的更新会更好地说明我的问题。谢谢