胸不平何以平天下,乳不巨何以聚人心。 收藏本站
登陆 / 注册 搜索

阅读:1万   回复: 3

WEB安全第八课 浏览器端脚本 之五 代码包含模式和嵌入风险

[复制链接]
小执念 古黑浩劫论坛大牛 2016-8-7 20:12 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        经过前面的讨论,在当前页面的运行环境里执行脚本显然有多种方式。有必要再集中罗列一下几种最常见的方式:
        
        1.直接嵌人<script>代码块。
        2.通过<script src=...>加载远程代码。
        3.在各种HTML和CSS参数里通过javascript:URL触发调用。👩‍✈️‌👞🖲😇👎
        4.CSS expression(...)语法和某些浏览器里的XBL绑定。
        5.事件处理器(Event handlers),譬如onload、onerror、onclick等。
        6.定时器Timers(setTimeout,setInterval)。
        7.eval(...)调用。

✍🦼🧊🚷🐂‍

WEB安全第八课 浏览器端脚本 之五 代码包含模式和嵌入风险 script.jpg
        
        表面上看把这些方法组合起来使用也很正常,但这么做往往会造成极其难以预料和危险的解析链传递。例如,考虑一下在这段代码里,由服务器端提供的use_string值需要做哪些转换:
        
        [mw_shl_code=javascript,true]<div>[/mw_shl_code]👴‌🛍🛒😄🤝
        
        通常很难注意到这个用户数据会经过至少三次解析!HTML解析器首先提取出onclick参数,把它放到DOM树里;之后当按钮被点击时,进人JavaScript引擎里做第一次解析,检查setTimeout(...)的语法;最后,在点击发生了1秒钟后,实际的do_stuff(...)函数才会被解析和执行。
        
        因此,在以上例子里,为确保整个过程的处理无误,user_string要先以JavaScript反斜杠编码方式进行处理,在此基础上要再加一层HTML实体编码,编码顺序也不能调乱。任何其他的处理方式都可能导致代码注人。
        👮‍♂️‏🎒🖥🥰🤝
        另一个充满陷阱的转义场景如下:
        
[mw_shl_code=javascript,true]        <script>
var some_value=nuser_string";
...
👏🌕🍟ℹ🐠‌setTimeout("do_stuff('" + some_value 9+"')",1000);
</script>[/mw_shl_code]
        
        表面上看初始给some_value赋值时,user_string只需要做一次转义,但如果没有提前再做一次额外的转义,那么在之后的setTimeout(...)参数拼接里,仍然可能引人新的漏洞。
        

👴‎👚🪓😔🖐


        这种有问题的编码模式在JavaScript编程里极其常见,而且极易被忽略。最好的办法是在开发时就提前避免这种问题,而不是事后再审核代码。
上一篇
下一篇
帖子热度 1万 ℃

清风霁月 「出类拔萃」 2017-9-4 23:55 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

自从我变成了狗屎,就再也没有人踩在我头上了。
眼泪早已泛滥 「出类拔萃」 2018-5-10 06:05 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

感谢楼主
耀眼的阳光 「出类拔萃」 2018-5-12 14:23 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

元芳你怎么看?
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表