百度空间 | 百度首页 
 
查看文章
 
Data URL Schema 与 如何盗链百度的图片
2009-06-24 15:29
百度的图片和很多网站防盗链措施一样,是基于Referer 判断
1. 如果浏览器发送的Referer 中不是从百度的域过来的,则判断为盗链
2. 如果浏览器没有发送Referer 头,则认为是不是盗链


现在网上的很多教程都教人怎么伪造Referer,或者不发送Referer。比如Firefox在 about:config 中,可以有选项把Referer的发送给关闭掉。也有很多浏览器的插件和扩展,可以改掉Referer,比较出名的有 RefControl 等。

除此之外,还有一些方法,比如在9.0.45.0 及以前的Flash中,通过ActionScript构造请求的时候,可以自定义 Referer 头。

但是以上这些方法都太重量级了。对于网站来说,很难要求自己的用户去装插件、扩展。在未来,planet的新版本中可能需要解决这个问题,于是这两天我研究了一下,顺便发现可能是浏览器缺陷的一个问题。

目前我在IE8中没有找到好的办法,没有测试IE的其他版本。

利用 Data URL Schema 绕过Referer Check

关于 Data URL Schema 请参考

http://www-archive.mozilla.org/quality/networking/testing/datatests.html

在 Firefox 中有实现,IE不支持。Opera , Safari 参考的 Firefox 的实现

利用 Data:xxxxxxx 可以写各种不同的内容,甚至能够通过base64嵌入二进制的图片到URL里。

比如,要构造XSS,可以这样:

<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=">test</a>

会弹出个小框。


我经过测试,构造了以下方式可以成功实现不发送Referer的需求

<iframe src="data:text/html;base64,PGltZyBzcmM9aHR0cDovL2hpcGhvdG9zLmJhaWR1LmNvbS9hdWxsaWs1L3BpYy9pdGVtL2IyY2RiNDQ0YTVlYTQ0MDJjZmZjYTMxNy5qcGVnIC8+" ></iframe>

base64 加密的部分实际上就是

<img src=http://hiphotos.baidu.com/aullik5/pic/item/b2cdb444a5ea4402cffca317.jpeg />

可以查看一下新开iframe的域,使用以下的测试方式
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pO2FsZXJ0KHdpbmRvdy5sb2NhdGlvbik7PC9zY3JpcHQ+"></iframe>



在iframe中弹出document.domain,可以看到当前的域还是在 www.a.com

说到这里,就要插两句关于 Firefox 的同源判断和Referer 发送规则了。

一般来说, Firefox 会根据当前的JSContext来寻找当前页面的源,doc->GetPrincipal();

发送的 Referer 头的内容,就是获取的页面源。

在 Firefox 中,点击一个link,或者 <img >, <iframe>等标签获取内容时,都会发送相应的 Referer 出去。甚至右键点击一个link,在新的tab中打开,也会发送referer(在新tab中打开页面本来是不发送referer的,有人提交这个bug后,就fix了)。

这样看来,利用 Data URL Schema 构造一个新的语境,再执行一个访问的请求,就不会发送 Referer, 应该属于一个浏览器的缺陷。要说是 Feature 也可以,又是有争议的地方啊。

类别:象牙塔 | 添加到搜藏 | 浏览() | 评论 (11)
 
最近读者:
 
网友评论:
1
2009-06-24 15:46 | 回复
应该还是算是缺陷。

 
2
2009-06-24 16:10 | 回复
防不胜防啊~
 
3
2009-06-24 20:59 | 回复
哇晒,刺牛又捅破人家的裤挡了...!!!
 
4
2009-06-24 22:46 | 回复
请问一下只是通过Referer 的参数来判断同源吗?
百度Blog中的那个流量分析就是根据这个参数来做的吧。
 
6
2009-06-25 09:51 | 回复
是的
 
7
2009-06-25 10:10 | 回复
又要被和谐了
 
8
2009-06-26 20:38 | 回复
和谐计时开始,。
 
9
2009-06-30 12:59 | 回复
用xml.http就可以盗链,不用管客户端
 
10
2009-06-30 13:02 | 回复
好像现在失效了,呵呵
 
11
2009-07-05 11:33 | 回复
不知道怎么盗链百度的图片?
 
12
2009-09-01 15:14 | 回复
牛XX,看来现在用FF也不安全啊,强大也有其致命弱点
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu