iis - 防止热链接不起作用 IIS 10 - Windows server 2016
问题描述
我不知道如何防止 IIS 10 - web.config 上的热链接。我在谷歌上找到了一个解决方案,但它似乎不起作用,这是我的代码:
<rule name="Hotlinking Preventing" stopProcessing="true">
<match url=".*\.(png|jpe?g|gif)" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^$" negate="true" />
<add input="{HTTP_REFERER}" pattern="^https?://(m\.)?domain\.com/.*$" negate="true" />
</conditions>
<action type="Rewrite" url="/assets/images/hotlinking.png" />
</rule>
任何想法:(?非常感谢。
解决方案
作为网站开发人员,有时不希望我们自己网站上的图像被直接引用并显示在其他网站上。在某些情况下,它可能会为我们的数据中心带来大量网络带宽,这意味着我们需要花钱购买使用我们图像的人。
例如,您的网站是 www.sample1.com,您在http://www.sample1.com/test.jpg上有一张图片,而 www.sample2.com 通过在 www.sample2.com 中添加标签来使用您的图片他们的 HTML,它可能会导致网络请求进入您的服务器消耗您的资源。
如果用户登陆 www.sample2.com 访问http://www.sample1.com/test.jpg,对于 www.sample1.com 的 Web 服务器,此特定图像的 HTTP 请求将具有名为“referer”的 HTTP 标头值为“ http://www.sample1.com ....”。这是我们将检查和阻止请求的地方。
url重写规则:
<rule name="Prevent Image Hotlinking">
<match url=".*\.(jpg|jpeg|png|gif|bmp)$" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^$" negate="true" />
<add input="{HTTP_REFERER}" pattern="^http://www.sample1.com/.*$" negate="true" />
</conditions>
<action type="Rewrite" url="/img/no_hotlinking.png" />
如果它仍然不起作用,请尝试禁用缓存并重试。
如果您想阻止多个站点,那么您还可以使用重写地图并设置站点列表。
<system.webServer>
<rewrite>
<rules>
<rule name="Blacklist block" stopProcessing="true">
<match url="(?:jpg|jpeg|png|gif|bmp)$" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^https?://(.+?)/.*$" />
<add input="{DomainsBlackList:{C:1}}" pattern="^block$" />
<add input="{REQUEST_FILENAME}" pattern="splog.png" negate="true" />
</conditions>
<action type="Redirect" url="http://www.hanselman.com/images/splog.png" appendQueryString="false" redirectType="Temporary"/>
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="DomainsBlackList" defaultValue="allow">
<add key="google-chrome-browser.com" value="block" />
<add key="www.verybadguy.com" value="block" />
<add key="www.superbadguy.com" value="block" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
推荐阅读
- git - 强制 docker 缓存 git clone 命令
- node.js - 无法通过最新 api 中的示例代码将数据从后端传输到前端
- maven - 将 pom 转换为 build.gradle
- swift - 尝试训练数据模型时出现 Swift CreateML 错误。非常感谢任何输入
- c# - 如何通过一次调用使用 mongo db C# 驱动程序添加嵌套元素或更新属性
- php - 如何从不同的帖子访问 WordPress 帖子缩略图?
- aws-lambda - 如何传递从 SNS 发送的自定义消息/文本以在 Lambda 函数中使用
- django - Django Rest Framework 中的模型翻译
- django - 从 ManyToManyField 数据中添加 ForgeinKey 数据时,“无法通过模型实例访问管理器”
- c++ - 我在 C++ 中构建 node.js 绑定应该 .gitignore *.gypi 文件