我有两个服务器,一个用于我的mvc应用程序,另一个用作大型文件(如图像等)的存储,两者都运行在Windows Server 2012 R2上。
如何阻止直接访问存储服务器上的文件?
说,mvc在IP1/
上,存储在IP2/
上。
链接到文件就像:IP2/MediaFiles/2015/12/image0001.jpg
。
我需要来自GET
的仅 IP1
次请求才能访问上述链接。怎么样?
更新
由于媒体服务器在IP1
上,IP2
上的{1>服务器1需要没有文件共享,我们不需要在server1的RAM上按请求加载文件。 (server1很快就会崩溃!)因此不能使用HttpHandler
!
在这个问题中,我正在寻找一种方法来阻止未经授权的用户通过输入直接地址来访问server2上的文件(在IP2
上)。
答案 0 :(得分:2)
好吧,我找到了解决方案!
解决这些问题需要根据您的需求从不同来源收集一些技巧。我一直在寻找一种方法来防止未经授权的用户访问与主服务器不同的文件服务器上的文件。 (主服务器正在授权用户)
首先,我使用IIS规则阻止了包含敏感文件的 Url模式的所有传入请求。然后我为文件服务器编写了一些代码行来处理使用IHttpHandler
接口的Http请求,以便1)检查授权规则和2)将确切文件发送给客户端而不将它们转换为字节数组。最后,我使用This Link来美化文件服务器的链接!那是所有人;)
现在:
物理链接[已屏蔽] :IP2/MediaFiles/2015/12/image0001.jpg
虚拟链接:IP2/Please/Find/A/File/By/DB/Id/1
---> image0001.jpg
答案 1 :(得分:0)
您想要的所有内容都在Web.Config
文件中。如果在那里使用IIS,则应将其放在文件存储服务器的根目录中。
在<system.webServer>
节点中,您应该放置以下代码:
<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>
对于根文件夹的所有子文件夹,将接受此规则。如果您只需要阻止特定文件夹的请求,则应放置Web.Config
字符。
Theck this article如果你想了解更多有关IIS中的IP黑白名单的信息。