昨天早上和JerryQu骑车上班的途中聊天,他这几天遇到一个特殊的需求。
页面中调用一个通过CMS发布的callback,callback返回一段字符串内容,然后页面拿到内容后直接innerHTML塞到某个ID里面去。本身这是个很简单的需求。
但是现在需求复杂了,希望callback返回内容中有一段脚本,用来操作页面的DOM。不想改变页面的原因是,要走整套上线流程,非常麻烦,你们懂的。
也就是本身返回的内容是"这是返回的内容",现在变成"这是返回的内容",但是这样直接innerHTML进去的话是不被执行的。
一种解决方案是,将script标签变成iframe,嵌套一个新的页面(这个页面也是通过CMS发布,所以也很方便),然后iframe的页面用来操作父页面的DOM(当然是在同一个域下)。
后来想到了一种解决方案。利用XSS经常用的方式,插入一个img标签,设置src为一个不存在的URL,然后再onerror事件里操作页面的DOM,如:
返回内容为"这是返回的内容"。
经测试,一切OK。
这种方式虽然可行,但不推荐,除非万不得已的情况下才去使用。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8