XSS攻击与防御
什么是XSS攻击
XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为了不与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,是WEB应用程序中最常见到的攻击手段之一。跨站脚本攻击指的是攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、盗取用户名密码、下载执行病毒木马程序甚至是获取客户端admin权限等。
常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的;另一种是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的
如
value为输入框输入的值,本来输入张三,应该显示为
1 | <input type="text" name="nick" value="张三"/> |
然而恶意输入"/><script>alert("haha")</script><!-
,就显示为了
1 | <input type="text" name="nick" value=""/><script>alert("haha")</script><!-" /> |
分为三类
第一类为:反射型XSS
反射型XSS只是简单的把用户输入的数据反射给浏览器,攻击者需要诱导用户点击一个恶意链接才能攻击成功
第二类为:存储型XSS
存储型XSS会把用户输入的数据存储在服务器端,如黑客写下一篇含有恶意js的博客,发表之后所有访问该博客的用户都会在浏览器上执行该恶意js代码。攻击者将恶意脚本存储在服务器端,所以叫存储型XSS
第三类为:DOM BASE XSS
DOM BASE XSS是一种特殊的反射型XSS,通过修改页面的DOM节点形成的XSS
如何进行防御
XSS之所以会发生,是因为用户输入的数据变成了代码。一般是用户输入中不是用的,因此,我们需要对用户输入的数据进行HTML转义处理,将其中的“尖括号”、“单引号”、“引号” 之类的特殊字符进行转义编码
还可以设置cookie的HttpOnly属性,浏览器禁止页面JavaScript访问带有HttpOnly属性的cookie,可以防止XSS攻击者获取Cookie