06月26, 2010

巧用XSS为实际需求服务

昨天早上和JerryQu骑车上班的途中聊天,他这几天遇到一个特殊的需求。

页面中调用一个通过CMS发布的callback,callback返回一段字符串内容,然后页面拿到内容后直接innerHTML塞到某个ID里面去。本身这是个很简单的需求。

但是现在需求复杂了,希望callback返回内容中有一段脚本,用来操作页面的DOM。不想改变页面的原因是,要走整套上线流程,非常麻烦,你们懂的。

也就是本身返回的内容是“这是返回的内容”,现在变成“这是返回的内容<script>这里增加一些脚本操作页面</script>”,但是这样直接innerHTML进去的话是不被执行的。

一种解决方案是,将script标签变成iframe,嵌套一个新的页面(这个页面也是通过CMS发布,所以也很方便),然后iframe的页面用来操作父页面的DOM(当然是在同一个域下)。

后来想到了一种解决方案。利用XSS经常用的方式,插入一个img标签,设置src为一个不存在的URL,然后再onerror事件里操作页面的DOM,如:

返回内容为“这是返回的内容<img src="h" onerror="这里的脚本用来操作页面DOM">”。

经测试,一切OK。

这种方式虽然可行,但不推荐,除非万不得已的情况下才去使用。

本文链接:http://welefen.com/post/use-xss-for-program.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。