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

全部博文(272)

文章存档

2012年(272)

分类: 网络与安全

2012-06-26 17:21:07

今天一大早就接到木瓜的短信,说secinn被跨了。

我跑上去一看,发现小G发了篇blog,把首页跨了,现在已经fix了,所以截张图如下(本地调试环境):



这是一件非常灵异的事情,为什么这么说呢?

因为目前planet的feed抓取全部是来自google的rss,如果在secinn出现了XSS,那么google reader是不是也被跨了呢?我看了下,发现google没有被跨。

到底是怎么一回事?

这篇blog在我的数据库里存储时是encode了危险字符的:


但是在页面展示时,我发现encode过的字符神奇的还原了!

以下是页面源代码


说明在渲染过程中,htmlencode过的字符被还原了!

经过仔细追查,我发现这是第三方包BeautifulSoup的问题!

因为之前我写过,使用iframe src=javascript 的方法block referer的发送,所以我在页面渲染前使用了BeautifulSoup 先解析页面,然后找出图片,并进行替换,整个过程大致类似:

feeds = pm.getFeedsBySite(site=site, page=page)
for feed in feeds:
feed.content = pm.antiRefererImage(feed.description)

def antiRefererImage(self, str):
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
......

而BeautifulSoup 会自动补全不对齐的标签,可能在这个过程中还原了htmlencode过的字符。

后来的测试也证实了这一点。


修补:
暂时开启了以前luoluo写的xss filter,但是anti-referer功能也因此失效。

如果要保留iframe的功能又要防XSS,需要修改BeautifulSoup底层的代码,所以我暂时放弃了这种方案。

百度图片防盗链我可能在之后使用另外的方式解决,比如https 302的方式。


最后,还是感谢小G报告的bug,也因此发现了BeautifulSoup的一个问题,欢迎多测试,thanks!

此外祝大家新年快乐!
阅读(1168) | 评论(0) | 转发(0) |
0

上一篇:关于Bypass SEHOP

下一篇:推荐一项新技术

给主人留下些什么吧!~~