XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
场景1 :先看一个场景 web编程比较常见的
- ...<input type=input value="<?=$_GET['kw']?>" > ....
假如url 类似 如下参数会发生 什么
search.php?kw="><script>alert(9);</script><input "
很显然 input 会被隔离成3个部分 这样别人就可以在这个url 注入恶意js代码了
注:之后它就可以做很多事情,比如利用浏览器漏洞注入木马
<input type=input value=""><script>alert(9);</script><input "" >
解决方法很简单,即可
- <input type=input value="<?=htmlspecialchars($_GET['kw'])?>" >
场景2 ,有富文本展示的情况,比如 blog文章展示
<div ><?=$info['html']?></div>
这种情况
用户在后台可以提交html内容,
比如图片,字体大小控制 等标签,如果用户也提交了 script 标签呢,
(不要说:编辑器没有提供此功能,用户就做不到,恶意的用户总会有办法的)
所以关键是在用户提交保存的时候,进行过滤(当然你也可以显示的时候处理,只是这样效率更低,
提交保存的时候只要处理一次即可):
要过滤的内容:script,iframe,form 标签 , 等事件属性 ,
对于style 属性 expression 表达式要过滤掉,另外一个常放错误的是ubb的 处理
具体过滤代码 网上很容易找到
场景3:
用户使用ubb或者 html富文本,提交了一个图片
这个图片的链接是特别设计的
比如我希望x加我为好友
他id比如123
假如加好友的链接是
http://home.51cto.com/index.php?s=/Friend/addFriend&fuid=1234¬e=xyz
我把这个链接放到img里面
此用户浏览包含此img的页面 他就自动请求加我好友,很显然我点击同意即可,
而他还什么也没有干
解决方法也很简单,动作(修改,删除,添加)应该使用post
如果你偷懒 使用 $_REQUEST 那就悲剧了 GET 也生效
本文出自 “沈冬明的技术博客” 博客,请务必保留此出处http://shendongming.blog.51cto.com/458802/661792
小结:
当然xss 攻击/防范不限于此,但是方法都一样,不要相信用户提交的任何数据:
包括 url参数,post,cookie,还包括http header
http header 也可以伪造 ,在接受这些数据的时候要进行严格的格式校验
在展现的时候要避免执行恶意代码,一般进行转移和替换掉,或者提交的使用就执行此操作