本文主要记录三种前端的安全攻击及防控方法:
跨站脚本攻击(XSS) ,跨站点请求伪造(CSRF), 点击劫持(ClickJacking)
一:XSS
通过"HTML注入"篡改网页,插入恶意脚本,从而在用户浏览网页是,控制用户浏览器的一种攻击方式.
攻击
1.反射型XSS (非持久型XSS)
把用户输入的数据"反射"给浏览器, 通过诱使用户点击一个恶意连接,达到攻击目的.
2.存储型XSS (持久型XSS)
把恶意的脚本保存到服务器端.
3.DOM Based XSS
修改页面的DOM节点.
防御
1. HttpOnly 禁止JS访问HttpOnly的cookie
2. 输入检查 客户端使用js进行输入检查,服务器端也必须加,因为客户端的输入检查很容易被攻击者绕过
3. 输出检查 编码或转义,输出的变量必须在"内"
4.白名单
二:CSRF
攻击者诱使用户访问了一个页面,然后以该用户身份在第三方站点执行攻击操作.(用携带用户身份信息的cookie向第三方站点发请求)
攻击原理
浏览器的Cookie分为"Session Cookie"(临时Cookie) 和 "Third-party Cookie"(本地Cookie) 两种
1. Session Cookie保存在浏览器进程的内存空间中, 在关闭浏览器之后,才失效. 所以若一个网站设置了Session Cookie,然后新打开一个tab页,session cookie也会在新的页面发送.
2. Third-party Cookie 保存在本地, 跨域的时候,部分浏览器(eg:IE)会阻止 Third-party Cookie的发送.
但是,如果网站返回给浏览器的HTTP头中包含有P3P头,会放开对Third-party Cookie的拦截
3. 大多数CSRF攻击发起时,使用的HTML标签都是<img> <iframe> <script>等等带src属性的标签 (这些标签只能发起一次GET请求)
但是,如果想构造一个POST请求的攻击,也是可以的: 在页面构造好一个form表单,然后使用javascript自动提交这个表单.
防御
1.增加验证码,重要的操作,除了用cookie验证身份之外,再加上验证码验证,双重验证.
2. Referer Check 检查请求是否来自合法的源
3.Token 注意保密性和随机性 (放到session中 或者浏览器cookie中)
三:点击劫持
是一种视觉上的欺骗手段.将透明不可见的iframe覆盖在一个网页上,诱使用户在操作网页的时候,点击到这个透明的iframe页面的功能性按钮上,从而达到攻击目的
防御
1. frame busting,禁止iframe的嵌套
2.X-Frame-Options
此属性的三个值:
DENY:浏览器会拒绝当前页面加载任何frame页面
SAMEORIGIN: frame页面的地址只能为同源域名下的页面
ALLOW-FROM origin : 允许frame加载的页面地址.