防止人们从我托管的 ASP.NET 网站热链接到图像的最佳/最简单方法是什么?我不需要阻止所有图像/资源热链接,我只想阻止热链接到站点上的特定图像/资源。供参考。它在 GoDaddy.com 上托管,因此 IIS 技巧可能不起作用。
4 回答
最简单的方法是使用 IIS 7.0 中的 UrlRewrite。
https://help.maximumasp.com/KB/a738/using-url-rewrite-to-prevent-image-hotlinking.aspx
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="PreventImageHotlinking" enabled="true" stopProcessing="true">
<match url=".*\.(gif|jpg|png)$" />
<conditions>
<add input="{HTTP_REFERER}" negate="true" pattern="^$" />
<add input="{HTTP_REFERER}" negate="true" pattern="http://www.YourDomain.com/.*" />
</conditions>
<action type="Rewrite" url="/images/hotlinking.jpg" />
</rule>
</rules>
</rewrite>
</system.webServer>
您可以拒绝任何在 HTTP 引用标头字段中没有您的站点的图像请求。这就是理论。为了控制应用程序中的请求,您必须通过 ASP 页面流式传输所有图像(而不是直接链接到它们)。
通过 ASPX 页面流式传输图像是一个很好的解决方案。虽然 Referrer 可能会被黑客入侵。
如果您真的关心安全性,您可以做的是使用唯一的盐(关键字)并针对 MD5(SHA-1 或 SHA-2)生成。同时运行当前纪元时间,这也会使图像到期。将此“密钥代码”存储在 cookie 中。每当提供图像时,您基本上都会通过查询字符串传递它。验证发生在另一端的 ASPX 上。您甚至可以使用 HTTPRequestModule 或 Global.asax 页面在每个请求之间重新生成一个新的“密钥代码”。
会有开销,但它会阻止任何人进行盗链。
我看到的一件我认为很聪明的事情是在图像的底部添加一个额外的部分,然后在您的网站上显示时使用 css sprite 技术将其切断。一个天真的热链接将导致显示您的额外部分。这将意味着图像是倾斜的,因此它在其他站点上看起来不正确,您可以使用额外的部分来显示您自己的 url 或您想要的任何其他内容。