浏览器工作原理与实践(七)

XSS

XSS跨站脚本,黑客往HTML文件或DOM中注入恶意脚本,从而在用户浏览页面利用注入脚本对用户实施攻击。

  1. 窃取cookie信息,通过document.cookie,然后通过XMLHttpRequest加上CORS发送给恶意服务器,拿到cookie可以模拟登录转账
  2. 监听用户行为,用addEventListener监听键盘事件,信用卡信息,发送恶意服务器,作违法的事
  3. 修改DOM人为造假的登录窗口,欺骗用户输入用户名和密码
  4. 页面生成浮窗广告,影响用户体验

XSS分为存储型XSS攻击、反射型XSS攻击和基于DOMXSS攻击3种方式注入恶意脚本。
存储型XSS攻击:黑客将恶意代码放到有漏洞的服务器,用户访问了有恶意代码的页面,上传用户信息到恶意服务器
反射型XSS攻击:恶意脚本成了用户发送请求的一部分(get地址上),然后网站又把恶意代码返回给用户,页面执行时做恶意操作
基于DOMXSS攻击:通过wifi路由器,本地恶意软件劫持在传输过程中修改页面

首先都是先往浏览器注入恶意脚本,然后再通过恶意脚本将用户信息发送到恶意服务器。
解决:

  1. 服务器对输入脚本进行过滤或转码
  2. 充分利用CSP,限制加载其它域资源,禁止向第三方提交数据,禁止执行内联和未授权脚本,提供上板机制
  3. 使用httpOnly属性,无法通过document.cookie读出来
  4. 增加验证码
  5. 限制输入长度

    CSRF

    CSRF跨站请求,伪造利用用户的登录状态通过第三方站点做一些坏事。

  6. 自动发起get接口,比如接口在img,src当加载图片自动去发起请求
  7. 自动发起post,隐藏表单并且内容是转账接口,加载到JS提交表单
  8. 引诱用户点链接,点图片地址是转账接口

CSRF不需要将恶意代码注入页面,仅是利用服务器的漏洞和用户的登录状态实施攻击。
条件:

  1. 目标站点一定要有漏洞
  2. 用户登录过目标站点,并在浏览器保持有站点的登录状态
  3. 需要用户打开一个三方站点(黑客or论坛),关键是找到服务器漏洞

解决:

  1. 利用cookieSameSite属性,cookie是浏览器和服务器之间维护登录状态的关键数据。
    通常CSRF攻击都是从第三方站点发起的,最好能实现从第三方站点发送请求时禁止cookie的发送。因此在浏览器通过不同源发送http请求时,有如下区别:
    1.第三方发起的请求,需要浏览器禁止发送某些关键cookie数据到服务器
    2.同一站点发起的请求,需要保证cookie数据正常发送
    通过Set-CookieSameSite属性值:Stric最严,完全禁止第三方cookieLax:链接打开get会带cookiepost,img,iframe,加载的url不会带。none:都会带。
  2. 验证请求的来源点,在服务器端验证请求来源的站点,服务器可以禁止第三方站点请求。
    从请求头中RefererOrigin判断第三方。Referer会包含路径信息,会优先判断Origin
  3. CSRF token:
    1.浏览器发送请求时,服务器生成CSRFToken植入返回的页面中。2.浏览器发起转账时要带上页面的CSRFToken。

页面安全问题主要原因是浏览器为同源策略开的2个后门:一是页面可以任意引用 第三方源。二通过CORS跨域请求。
基于这些,又引入了CSP限制页面任意引入外部资源、引入HttpOnly来禁止请求发送一些关键cookie、引入SameSiteOrigin,来防止CSRF攻击。

你可能感兴趣的:(javascript)