<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SpookZanG &#187; 盗链</title>
	<atom:link href="http://www.spookzang.net/article/tag/%e7%9b%97%e9%93%be/feed" rel="self" type="application/rss+xml" />
	<link>http://www.spookzang.net</link>
	<description>安全,漏洞,发现,共享,交流</description>
	<lastBuildDate>Tue, 27 Jul 2010 15:28:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Data URL Schema 与 如何盗链百度的图片</title>
		<link>http://www.spookzang.net/article/801</link>
		<comments>http://www.spookzang.net/article/801#comments</comments>
		<pubDate>Thu, 02 Jul 2009 06:19:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[脚本相关]]></category>
		<category><![CDATA[baidu]]></category>
		<category><![CDATA[Referer]]></category>
		<category><![CDATA[盗链]]></category>

		<guid isPermaLink="false">http://www.spookzang.net/?p=801</guid>
		<description><![CDATA[百度的图片和很多网站防盗链措施一样，是基于Referer 判断的.如果浏览器发送的Referer 中不是从百度的域过来的，则判断为盗链.如果浏览器没有发送Referer 头，则认为是不是盗链.....]]></description>
			<content:encoded><![CDATA[<p>来源：刺</p>
<p>原文链接：<a href="http://hi.baidu.com/aullik5/blog/item/c82a94dc5d37b33d5982dde3.html">http://hi.baidu.com/aullik5/blog/item/c82a94dc5d37b33d5982dde3.html</a></p>
<p>百度的图片和很多网站防盗链措施一样，是<span style="color: #0000ff;"><strong>基于Referer 判断</strong></span>的<br />
<strong>1. 如果浏览器发送的Referer 中不是从百度的域过来的，则判断为盗链<br />
2. 如果浏览器没有发送Referer 头，则认为是<span style="color: #ff0000;">不是</span>盗链</strong></p>
<p>现在网上的很多教程都教人怎么伪造Referer，或者不发送Referer。比如Firefox在 about:config 中，可以有选项把Referer的发送给关闭掉。也有很多浏览器的插件和扩展，可以改掉Referer，比较出名的有 RefControl 等。</p>
<p>除此之外，还有一些方法，比如在9.0.45.0 及以前的Flash中，通过ActionScript构造请求的时候，可以自定义 Referer 头。</p>
<p>但是以上这些方法都太重量级了。对于网站来说，很难要求自己的用户去装插件、扩展。在未来，planet的新版本中可能需要解决这个问题，于是这两天我研究了一下，顺便发现可能是浏览器缺陷的一个问题。</p>
<p>目前我在IE8中没有找到好的办法，没有测试IE的其他版本。</p>
<p><span style="color: #0000ff;"><strong>利用 Data URL Schema 绕过Referer Check</strong></span></p>
<p>关于 Data URL Schema 请参考</p>
<p><a href="http://www-archive.mozilla.org/quality/networking/testing/datatests.html" target="_blank">http://www-archive.mozilla.org/quality/networking/testing/datatests.html</a></p>
<p>在 Firefox 中有实现，IE不支持。Opera , Safari 参考的 Firefox 的实现</p>
<p>利用 Data:xxxxxxx 可以写各种不同的内容，甚至能够通过base64嵌入二进制的图片到URL里。</p>
<p>比如，要构造XSS，可以这样：<br />
&lt;a href=&#8221;data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=&#8221;&gt;test&lt;/a&gt;</p>
<p>会弹出个小框。</p>
<p>我经过测试，构造了以下方式可以成功实现不发送Referer的需求</p>
<p><span style="color: #0000ff;">&lt;iframe src=&#8221;data:text/html;base64,PGltZyBzcmM9aHR0cDovL2hpcGhvdG9zLmJhaWR1LmNvbS9hdWxsaWs1L3BpYy9pdGVtL2IyY2RiNDQ0YTVlYTQ0MDJjZmZjYTMxNy5qcGVnIC8+&#8221; &gt;&lt;/iframe&gt;</span></p>
<p>base64 加密的部分实际上就是</p>
<p>&lt;img src=http://hiphotos.baidu.com/aullik5/pic/item/b2cdb444a5ea4402cffca317.jpeg /&gt;</p>
<p>可以查看一下新开iframe的域，使用以下的测试方式<br />
&lt;iframe src=&#8221;data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pO2FsZXJ0KHdpbmRvdy5sb2NhdGlvbik7PC9zY3JpcHQ+&#8221;&gt;&lt;/iframe&gt;</p>
<div><img src="http://hiphotos.baidu.com/aullik5/pic/item/58e03a009312c1287bec2c3a.jpg" border="0" alt="" /></div>
<p>在iframe中弹出document.domain，可以看到当前的域还是在 www.a.com</p>
<p>说到这里，就要插两句关于 Firefox 的同源判断和Referer 发送规则了。</p>
<p>一般来说， Firefox 会根据当前的JSContext来寻找当前页面的源，doc-&gt;GetPrincipal();</p>
<p>发送的 Referer 头的内容，就是获取的页面源。</p>
<p>在 Firefox 中，点击一个link，或者 &lt;img &gt;, &lt;iframe&gt;等标签获取内容时，都会发送相应的 Referer 出去。甚至右键点击一个link，在新的tab中打开，也会发送referer（在新tab中打开页面本来是不发送referer的，有人提交这个bug后，就fix了）。</p>
<p>这样看来，利用 Data URL Schema 构造一个新的语境，再执行一个访问的请求，就不会发送 Referer, 应该属于一个浏览器的缺陷。要说是 Feature 也可以，又是有争议的地方啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spookzang.net/article/801/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>用ISAPI_Rewrite做IIS防盗链</title>
		<link>http://www.spookzang.net/article/297</link>
		<comments>http://www.spookzang.net/article/297#comments</comments>
		<pubDate>Sat, 30 Aug 2008 08:20:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[安全新闻]]></category>
		<category><![CDATA[盗链]]></category>
		<category><![CDATA[防御]]></category>

		<guid isPermaLink="false">http://www.0day.hk/?p=297</guid>
		<description><![CDATA[“盗链”的定义是：此内容不在自己服务器上，而通过技术手段，绕过别人放广告有利益的最终页，直接在自己的有广告有利益的页面上向最终用户提供此内容。 如果通过WEB服务器的URL过滤技术，这个伤脑筋的问题会很容易得到解决。]]></description>
			<content:encoded><![CDATA[<p>“盗链”的定义是：此内容不在自己服务器上，而通过技术手段，绕过别人放广告有利益的最终页，直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址（比如一些音乐、图片、软件的下载地址）然后放置在自己的网站中，通过这种方法盗取大网站的空间和流量。<a name="entrymore"></a></p>
<p>　　为什么会产生盗链</p>
<p>　　一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面，那么最先的一个Http请求被传送回来的是这个页面的文本，然后通过客户端的浏览器对这段文本的解释执行，发现其中还有图片，那么客户端的浏览器会再发送一条Http请求，当这个请求被处理后那么这个图片文件会被传送到客户端，然后浏览器回将图片安放到页面的正确位置，就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制，就会产生一个问题，那就是盗链问题：就是一个网站中如果没有起页面中所说的信息，例如图片信息，那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者，提高了自己的访问量，而大部分浏览者又不会很容易地发现，这样显然，对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容，经常盗用其他网站的链接。一方面损害了原网站的合法利益，另一方面又加重了服务器的负担。</p>
<p>　　我遇到的盗链</p>
<p>　　我的网站遇到最多的是两类盗链，一是图片盗链，二是文件盗链。曾经有一个访问量极大的网站盗链我网站的图片，一天竟然消耗了数G的流量。同时，我站放的不少几十兆的大型软件也常遭到文件盗链，大量消耗我站资源。</p>
<p>　　盗链的解决方案</p>
<p>　　其实通过WEB服务器的URL过滤技术，这个伤脑筋的问题会很容易得到解决。  </p>
<p>　　如果WEB服务器用的是APACHE的话，那么使用APACHE自带的Url Rewrite功能可以很轻松地防止各种盗链，其原理是检查REFER，如果REFER的信息来自其他网站则禁止访问所需要的资源。</p>
<p>　　那么，IIS支持UrlRewrite吗？</p>
<p>　　答案很简单，不支持。但是我们可以通过安装第三方服务器扩展让IIS支持。  </p>
<p>　　目前有一种产品能比较好地支持IIS的UrlRewrite，名字叫ISAPI_Rewrite。  </p>
<p>　　下载地址在： http://www.helicontech.com/download/</p>
<p>　　这里只有ISAPI Rewrite的一个LITE版本是免费的，其它都是trial版本。ISAPI Rewrite Lite的版本功能不支持虚拟站点配置，元数据监测和自动缓存清理。 但是基本的UrlRewrite功能都支持。也可以到这里下载：http://www.codepub.com/Software/View-Software-8709.h&#8230;</p>
<p>　　如何进行UrlRewrite的设置？  </p>
<p>　　isapi_rewrite利用正则表达式进行替换规则的表示。  </p>
<p>　　下面是一个简单的例子，我想让我们的用户输入 http://localhost/test-12314.html 实际上访问的是 http://localhost/test.asp?id=12314 。那么我们的匹配表达式应该是 /test-([0-9]*).html 对应的格式化表达式应该为 /test.asp?id=$1 。  </p>
<p>　　进行正则表达式的编写的时候，可以利用isapi_rewrite提供的正则表达式测试工具（默认安装提供），进行调试。做好了匹配表达式和格式化表达式，我们可以把它们放到安装目录下的httpd.ini里面。文件保存后，不需重新启动iis即可生效。  </p>
<p>　　对于我的网站，我防盗链的方法是在httpd.ini里面加入如下语句</p>
<p>RewriteCond Host: (.+)</p>
<p>RewriteCond Referer: (?!http://1.*).*</p>
<p>RewriteRule .*.(?:gif|jpg|png|exe|rar|zip) /block.gif [I,O]<!-- Added by RelatedTopic, plugin for Bo-Blog 2.0.0 --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spookzang.net/article/297/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
