XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

 

场景1 :先看一个场景 web编程比较常见的

 

  1. ...<input type=input value="<?=$_GET['kw']?>" > .... 
  2.  


 

假如url 类似 如下参数会发生 什么

search.php?kw="><script>alert(9);</script><input "

很显然 input 会被隔离成3个部分 这样别人就可以在这个url 注入恶意js代码了

注:之后它就可以做很多事情,比如利用浏览器漏洞注入木马

<input type=input value=""><script>alert(9);</script><input "" > 

解决方法很简单,即可

  1. <input type=input value="<?=htmlspecialchars($_GET['kw'])?>" >  
  2.  

 



 

场景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&note=xyz

我把这个链接放到img里面

此用户浏览包含此img的页面 他就自动请求加我好友,很显然我点击同意即可,

而他还什么也没有干

 

解决方法也很简单,动作(修改,删除,添加)应该使用post

如果你偷懒 使用 $_REQUEST 那就悲剧了 GET 也生效

 本文出自 “沈冬明的技术博客” 博客,请务必保留此出处http://shendongming.blog.51cto.com/458802/661792

小结:

   当然xss 攻击/防范不限于此,但是方法都一样,不要相信用户提交的任何数据:

包括 url参数,post,cookie,还包括http header

http header 也可以伪造 ,在接受这些数据的时候要进行严格的格式校验

在展现的时候要避免执行恶意代码,一般进行转移和替换掉,或者提交的使用就执行此操作