本文主要记录三种前端的安全攻击及防控方法:

跨站脚本攻击(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加载的页面地址.