用 ISS Url 重写工具 屏蔽 图像盗链、窃取以及恶意剽窃

用 ISS Url 重写工具 屏蔽 图像盗链、窃取以及恶意剽窃

  • Comments 0

[原文发表地址]   Blocking Image Hotlinking, Leeching and Evil Sploggers with IIS Url Rewrite

[原文发表时间]   2013-06-03

 

我最近发现一篇名为“谷歌 Chrome 浏览器”的博客转载了我的帖子。(当然,这与谷歌以及谷歌团队里友好的朋友们没有关系。)

这是一个splog或“垃圾博客”。这不像是一篇博客,更像是“将你的知识窃取之后再发布”。每篇博文基本上都是复制的或是通过RSS从别处引过来的。这种情况一周会有好多次,也连续好多年了。

尽管如此,这一特殊的网站在搜索时总是先于我的网站,让我感觉很不爽。

You evil bastards.

更糟糕地是,他们在Twitter上有近2.5万追随者。我跟他们说过好几次让他们不要再这样做了,但是这时我有点厌倦了。

他们甚至“盗链”了我的图片,这意味着我所有的PNG格式的图像仍然在我的网站上托管。当您访问他们的网站时,文字是从我的RSS中转过来的,但是我还要为我的图片带宽付费。这真是太有讽刺意味了。更何况在他们的网站上,我的版权声明是完好的 J。

当一个图片被链接到另一个域时HTTP_REFERER 顶部由图像被链接到的位置所填充。这意味着我的Web服务器从谷歌Chrome浏览器的博客上为“foo.png”获得请求,我可以看到要求该图像的页面。

例如:

   1: Request 
   2: URL:http://www.hanselman.com/blog/content/binary/Windows-Live-Writer/How-to-run-a-Virtual-Conference-for-10_E53C/image_5.png
   3: Request 
   4: Method:GET
   5: Referer:http://google-chrome-browser.com/penny-pinching-cloud-how-run-two-day-virtual

由于这能够区分GET请求,这意味着我可以为此做点什么事情。由此带来几个重要的问题,一般来说我们需要记住这个网站,我感觉很多编程者都会忘���:

据此,我想检测这些请求,并服务不同的图像。

如果我在用Apache,而且有一个.htaccess文件,我可能会这样做:

   1: RewriteCond %{HTTP:Referer} 
   2: ^.*http://(?:www\.)?computersblogsexample.info.*$
   3: RewriteHeader Referer: .* 
   4: damn\.spammers
   5: RewriteCond %{HTTP:Referer} 
   6: ^.*http://(?:www\.)?google-chrome-browser.*$
   7: RewriteHeader Referer: .* 
   8: damn\.spammers
   9: #make more of these for each evil spammer
  10: RewriteCond 
  11: %{HTTP:Referer} ^.*damn\.spammers.*$
  12: RewriteRule ^.*\.(?:gif|jpg|png)$ 
  13: /images/splog.png [NC,L]

因为我在用ISS,我会在自己的web.config上做类似重写。我会做一个只允许从少量地方进行链接的白名单,或是一个只是屏蔽某些人的黑名单。以下是一个黑名单:

   1:  
   2: <system.webServer>
   3: <rewrite>
   4: <rules>
   5: <rule name="Blacklist block" 
   6: stopProcessing="true">
   7: <match 
   8: url="(?:jpg|jpeg|png|gif|bmp)$" />
   9: <conditions>
  10: <add 
  11: input="{HTTP_REFERER}" pattern="^https?://(.+?)/.*$" />
  12: <add 
  13: input="{DomainsBlackList:{C:1}}" pattern="^block$" />
  14: <add 
  15: input="{REQUEST_FILENAME}" pattern="splog.png" negate="true" />
  16: </conditions>
  17: <action 
  18: type="Redirect" url="http://www.hanselman.com/images/splog.png" 
  19: appendQueryString="false" redirectType="Temporary"/>
  20: </rule>
  21: </rules>
  22: <rewriteMaps>
  23: <rewriteMap 
  24: name="DomainsBlackList" defaultValue="allow">
  25: <add 
  26: key="google-chrome-browser.com" value="block" />
  27: <add 
  28: key="www.verybadguy.com" value="block" />
  29: <add 
  30: key="www.superbadguy.com" value="block" />
  31: </rewriteMap>
  32: </rewriteMaps>
  33: </rewrite>
  34: </system.webServer>

 

 

我只是制定了一个单一规则,并将这个糟糕的域放于其中,但是它将只为一个域服务,所以我的朋友Ruslan建议我制作一个重写地图,从这一规则中引用它。这样一来,我可以添加多个域来屏蔽这些恶意传播。

把splog.png文件排除在外很重要,我打算把这个坏家伙引向别处,否则我会陷入一个重定向循环,这会对splog.png的请求重新定位到它自身!

这一结果很有效。如果您访问他们的网站,我会发布一个HTTP 307 (已经暂时移除),这样你在任何地方都可以看到我的splog.png图像,看到这些他们盗链我的图像。

clip_image003

如果您想将黑名单变为白名单,您要在重写地图上将允许的值撤销并删掉。

   1:  
   2: <rewriteMaps>
   3: <rewriteMap name="DomainsBlackList" 
   4: defaultValue="block"> 
   5: <add 
   6: key="google-chrome-browser.com" value="allow" />
   7: <add 
   8: key="www.verybadguy.com" value="allow" /> 
   9: <add 
  10: key="www.superbadguy.com" value="allow" />
  11: </rewriteMap> 
  12: </rewriteMaps>

好棒,看起来简单又清晰。我不打算跟那些剽窃者玩“打地鼠”游戏,那样只会输掉比赛。但是我会将内容剽窃令人作呕的例子降到最低,尤其是当他们弄糟我的Google Juice时。

Leave a Comment
  • Please add 7 and 7 and type the answer here:
  • Post