上文说完了CSRF攻击,本文继续研究它的兄弟XSS攻击。javascript
XSS攻击全名(Cross-Site-Script)跨域脚本攻击,为了跟CSS(Cascading-Style-Sheet)区分开来,因此缩写是XSS。css
上一节说道的CSRF攻击是利用的是“伪请求”,这一节的XSS的原理是利用脚本注入的方式。
主要是依靠一切可能的手段,将浏览器中能够执行的脚本(javascript)植入到页面代码中,从而获取用户cookie甚至帐号密码等敏感数据使用户形成的必定的损失。
一般利用的是目标网站的发帖、发布产品等须要用户输入的地方,将脚本混淆到html输入中,上传到服务器,再诱导别的用户打开此页面,执行脚本的一个过程。html
xss漏洞是对web客户端(浏览器)的攻击,因此说植入的代码基本上以javascript和html标签(有时也有结合css样式的xss向量)为主。
通常有四种方法:java
举两个小李子:web
<script>alert('xss')</script> <img scr=1 onerror=alert('xss')> <a href=javascrip:alert('xss')>s</a> <iframe src=javascript:alert('xss');height=0 width=0 /> <img src=x onerror=appendChild(createElement('script')).src='js_url' /> <img src = “#”/**/onerror = alert(/XSS/)> <img src = j ava script :a ler t(/xss/)>
由于XSS的根本就是向网站插入脚本代码,并使它运行的一种手段。防护方法分为两种,服务端防护和客户端防护。
服务端防护:
1. HttpOnly
能够限制javascript不能读取cookie,防止会话ID泄露
2.处理富文本
过滤掉富文本中的敏感标签如(script、iframe、form),还有敏感词(javascript:) 等等
客户端防护:
1. 输入检查
防止输入敏感字段,如javascript、cookie
等等
2. 检查输出
脚本都是经过混淆在HTML当中,被当成html代码的一部分才获得执行。
能够经过编码转义的办法,使得混淆在其中的脚本被当成文本处理,不会被执行。
编码转义的话,有三种方法:segmentfault
*1. HTML encode* 将字符转换成HTMLEntities,通常会转(&、<、>、"、'、/)这6个字符。通常是在html标签属性输出的时候使用 *2. JavaScriptEncode* 使用”\“对特殊字符进行转义。 通常在script标签输出、事件输出、CSS输出 *3. URL Encode* 使用URLEncode的方法。
参考:
XSS的原理分析与解剖
跨站脚本攻击(XSS)——常见网站攻击手段原理与防护
XSS攻击及防护
XSS攻击的解决方法跨域
【相关】
web安全,是一个很重要的技能,也是一个领域的知识。我把这个领域的东西写成了一个系列,之后还会继续完善下去:
web安全一:同源策略与跨域
web安全二:CSRF 攻击
web安全三:XSS 攻击浏览器