前端安全

一、 XSS 攻击

Cross Site Script, 跨站脚本攻击。
是指攻击者注入恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,控制浏览器或者获取用户隐私数据。

  • 容易发生的场景
    数据从一个不可靠的链接进入到一个web应用程序。
  • XSS攻击的共同点
    将一些隐私数据如cookie、session发送给攻击者,将受害者重定向到一个由攻击者控制的网站,进行恶意操作。
  • XSS攻击的类型
  1. 反射型(非持久型)
    该攻击方式通常诱使用户点击一个恶意链接,或者提交一个表单, 此时,向用户访问的网站注入恶意脚本。
  2. 存储型(持久型)
    把用户输入的数据(带有恶意脚本)存储在服务器端。当浏览器请求数据时,服务器返回脚本并执行。
    常见的场景是: 攻击者在社区或论坛上写下一篇包含恶意 js代码的评论。发表后,所有访问该评论的用户,都会在他们的浏览器中执行这段恶意代码。
  3. 基于DOM
    修改页面的DOM结构。这是纯粹发生在客户端的攻击。
  • XSS攻击的防范
  1. 浏览器内置CSP
    通过 Content-Security-Policy HTTP头来开启CS,建立白名单,规定只能执行特定来源的代码:
    只允许加载本站资源: default-src ‘self’
    只允许加载HTTPS协议图片: img-src https://*
  2. HttpOnly
    通过JavaScript的 Document.cookie API来设置 HttpOnly 标记。对于设置了HttpOnly属性的cookie,js脚本将无法读取到cookie信息,窃取cookie内容,这样就增加了cookie的安全性
  3. XSS Filter
    检查用户输入的数据中是否包含 <,>,script 等特殊字符,若存在,则对器过滤或编码。

二、 CSRF 攻击

Cross Site Request Forgery, 伪造跨站请求。
利用用户的登录态发起恶意请求,从而在未授权的情况下,执行在权限保护下的操作。
这个攻击过程是借助受害者的 Cookie 骗取服务器的信任。但并不能拿到 Cookie,也看不到 Cookie 的内容。而对于服务器返回的结果,由于浏览器同源策略的限制,攻击者也无法进行解析。
因此,攻击者无法从返回的结果中得到任何东西,只能给服务器发送请求,执行描述的命令,在服务器端修改数据,而非窃取服务器中的数据。

  • CSRF攻击的防范
  1. 验证码
    CSRF攻击通常是在用户不知情的情况下发起了网络请求。而验证码会保证用户必须与应用进行交互,才能完成请求。

  2. 请求地址添加token验证
    在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器验证它,如果请求中没有 token 或者 token 内容不正确则拒绝该请求。
    对于GET请求,Token将附在请求地址之后。
    对于 POST 请求来说,要在 form 的最后加上
    <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>
    当用户从客户端得到了Token,再次提交给服务器的时候,服务器需要判断Token的有效性

  3. samesite 属性 设置为lax
    Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。
    它可以设置三个值:

  • Strict 只允许同站请求携带 Cookie,即 只有当前网页的 URL 与请求目标一致,才会带上 Cookie
  • Lax 大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外
    导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单
  • None 显示关闭SameSite属性,将其设为None。
    不过,前提是必须同时设置Secure属性(secure 的作用是:Cookie 只能通过 HTTPS 协议发送),否则无效。
    响应头中的 Set-Cookie,这个属于最常用的方式

CSRF 补充

由第三方网站引导发出的 Cookie,称为第三方 Cookie。
它除了用于 CSRF 攻击,还可以用于用户追踪。
比如,forum 在第三方网站插入一张看不见的图片。
<img src="forum.com" style="visibility:hidden;">

浏览器加载上面代码时,就会向 forum 发出带有 Cookie 的请求,
从而 forum 就会知道你是谁,访问了什么网站。

三、HTTPS 中间人攻击

Man-in-the-middle attack
是一种网络攻击方法。
攻击者悄悄的躲在通信双方之间,窃听甚至篡改通信信息。而通信双方并不知道消息已经被截获甚至篡改了。
成功的中间人攻击主要有两个不同的阶段:拦截和解密。

  1. 拦截
    攻击者在用户数据在到达目标设备前,进行拦截,并通过攻击者的网络。
    被动攻击: 攻击者向公众提供免费的恶意 WiFi 热点,一旦有受害者连接了该热点,攻击者就能完全了解所有的在线数据交换。
    主动攻击:
    ARP 欺骗: 攻击者利用 ARP (Address Resolution Protocol) 的漏洞,通过冒充网关或其他主机,使得到达网关或其他主机的流量通过攻击者主机进行转发。
    DNS 欺骗: 攻击者冒充域名服务器,将受害者查询的 IP 地址转发到攻击者的 IP 地址。

  2. 解密

  • SSL 劫持(伪造证书)

攻击者在 TLS 握手期间拦截到服务器返回的公钥后,将服务器的公钥替换成自己的公钥,并返回给客户端。
因为是伪造的证书,所以客户端在校验证书过程中会提示证书错误,若用户仍选择继续操作,此时中间人便能获取与服务端的通信数据。

  • SSL 剥离

攻击者拦截到用户到服务器的请求后,攻击者继续和服务器保持 HTTPS 连接,并与用户降级为不安全的 HTTP 连接。

服务器可以通过开启 HSTS(HTTP Strict Transport Security)策略,
告知浏览器必须使用 HTTPS 连接。但是有个缺点是用户首次访问时因还未收到 HSTS 响应头而不受保护。

  • MITM 攻击的防范
  • 对开发者:
  1. 支持 HTTPS。
  2. 开启 HSTS 策略。
  3. 默认情况下,cookie不会带secure选项,故http或 https传输都会携带cookie传给服务器。
    当请求是HTTPS或者其他安全协议时,包含 secure 选项(即:设置secure=true)的 cookie ,才能被发送至服务器。
  • 对用户:
  1. 避免连接不知名的 WiFi 热点。
  2. 不忽略不安全的浏览器通知。
  3. 不下载来源不明的证书。
查看评论