Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1172915
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-26 16:15:04

百度的图片和很多网站防盗链措施一样,是基于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 请参考



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

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

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

test

会弹出个小框。


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



base64 加密的部分实际上就是 



可以查看一下新开iframe的域,使用以下的测试方式




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

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

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

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

在 Firefox 中,点击一个link,或者 ,