XSS的类型
XSS攻击
XSS攻击,通常指黑客通过“HTML注入”篡改网页,插入了恶意的脚本,从而再用户浏览网页时,控制用户浏览器的一种攻击。举个例子:某个黑客发表了一片文章其中包含了恶意的JS代码,所有访问这片文章的人都会执行这端JS代码,这样就完成了XSS攻击;
反射型XSS
反射型XSS只是简单的把用户输入的数据反射给浏览器,也就是说,黑客往往需要引诱用户点击一个链接,才能攻击成功;
存储型XSS
存储型XSS会把用户输入的数据“存储“在服务器端,这种XSS具有很强的稳定性。黑客把恶意脚本保存到用户的服务器端,所以这种攻击就是存储型,理论上说,它存在的时间是比较长的。
XSS的防御
HttpOnly
HttpOnly最早是由微软提出,并在IE6中实现,至今已经成为了一个标准。浏览器将禁止页面的JS访问带有HttpOnly属性的Cookie; 其实严格来说,HttpOnly并非为了对抗XSS,HttpOnly解决的是XSS后的Cookie劫持攻击。HttpOnly现在已经基本支持各种浏览器,但是HttpOnly只是有助于缓解XSS攻击,但仍然需要其他的能够解决XSS漏洞的方案。
输入检查
在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如<,>等等。如果发现这些字符,则将字符过滤或者编码,这种输入检查的方式,可以叫“XSS Filter”,也就是XSS过滤。互联网上很多开源的“XSS Filter”的实现。 XSS Filter在用户提交数据的时候获取变量,进行XSS检查;但是此时用户数据并没有结合渲染页面的HTML代码,因此XSS Filter对语境的理解并不完整,甚至可能用户输入1<3,直接会把<符给过滤掉,所以一个好的XSSFilter是比较重要的。
输出检查
一般来说,除了富文本外,在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。和输入检查差不多。
That's all; 如上;