IIS禁止直接访问图像

时间:2014-09-26 10:27:43

标签: asp.net iis-7

我在IIS中创建了一个网站,根网站共享有一些子文件夹,用于标记页面正在使用的图像,css,js文件。但是,如果用户知道图像名称(http://hello.com/images/abc.jpg),则可以访问这些图像。

有没有办法禁用资源的直接访问?请注意,我刚刚开始学习asp.net,所以如果答案可能有点描述性,那将会很棒。

我已经了解了URL重写方法,但却无法让它工作。

编辑:我把这个web.config放在我的images文件夹中,现在它正在做相反的事情,在页面上阻止图像并直接允许它们。 任何帮助表示赞赏。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <identity impersonate="true" />
    </system.web>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="RequestBlockingRule1" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url=".*\.(gif|jpg|png)$" /> 
            <conditions>
                        <add input="{HTTP_REFERER}" pattern="^$" negate="true" />
                        <add input="{HTTP_REFERER}" pattern=" http://iolab023/.*" negate="true" /> 
            </conditions> 
                    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this directory or page using the credentials that you supplied." />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

1 个答案:

答案 0 :(得分:4)

如果要阻止直接访问上下文(来自客户端/浏览器),可以使用配置部分来阻止它。在站点根目录的web.config中,您可以使用此配置禁用“images”子目录。如果查看applicationhost.config,您将看到此部分已配置为阻止客户端直接访问“bin”文件夹。您只需要在applicationhost.config或web.config(如下所示)中将“images”添加到该列表中。

(如果在applicationhost.config中根本没有看到任何配置,则表示您需要使用“添加/删除程序”或Web平台安装程序在IIS中安装requestFiltering功能)。

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <hiddenSegments applyToWebDAV="true">
                    <add segment="images" />
                </hiddenSegments>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>