接上一期 ,这里主要考虑 CSS 注入的方式。CSS 注入主要为背景图注入和针对 Exploer 的 CSS Expression 注入。
考虑没有完全将样式过滤的情况,下面的代码即有可能成为攻击代码
<xss style="behavior: url(xss.htc);">
上面的是针对 Exploer 的 htc 注入,htc 可以认为是个脚本。
<div style="background-image: xss.jpg">
谁会知道 xss.jpg 是什么内容呢?不过很多站点统计代码也是使用了这一原理。
<div style="width: expression(alert('xss'));">
<img style="xss:expr/*xss*/ession(alert('xss'))">
exp/*<A style='noxss:noxss("*//*");xss:ex/*xss*//*/*/pression(alert("xss"))'>
针对 Exploer 的 Expression 要保持「淡定」,最好的做法就是过滤 style 属性。
如果没有将注释完全过滤充分,则又会在 Exploer 出现典型的注入漏洞
<!--[if gte IE 4]>
<script>alert('xss');</script>
<![endif]-->
安全性问题,这个时候我反而感谢 Exploer 提供那么多的「机会」。
-- Split --
那么如何预防 XSS 注入?主要还是需要在用户数据过滤方面得考虑周全,在这里不完全总结下几个 Tips
- 假定所有的用户输入数据都是「邪恶」的
- 弱类型的脚本语言必须保证类型和期望的一致
- 考虑周全的正则表达式
- strip_tags、htmlspecialchars 这类函数很好用
- 外部的 Javascript 不一定就是可靠的
- 引号过滤必须要重点注意
- 除去不必要的 HTML 注释
- Exploer 求你放过我吧……
Exploer 叫我向你转达一句话, 放过你? 门都没有, 我要让你求生不得,求死不能, 生生世世,一直折磨下去,哼哼..
真没意思
Exploer 求你放过我吧……
本文的亮点