# XSS 攻击

# 概念

XSS 指的是跨站脚本攻击,是一种代码注入攻击,本质是网站没有对恶意脚本进行过滤,导致其和普通代码混在了一起,最终被浏览器执行。

# 可以进行的操作

  • 获取页面的数据,比如 DOM,cookie,localStorage,sessionStorage
  • DOS 攻击,向服务器发送大量的请求,占用服务器资源,导致用户无法访问服务器
  • 破坏页面结构
  • 流量劫持(将链接指向其他网站)

# XSS 攻击类型

  • 存储型 XSS 攻击
    指的是恶意脚本会存储在服务器上,等到浏览器请求数据的时候,恶意脚本会返回,并执行。
  • 反射型 XSS 攻击
    指的是诱导用户访问一个带有恶意代码的 url 后,服务器接收到数据后,把带有恶意代码的数据返回给浏览器,浏览器解析带有恶意脚本的数据,当作脚本执行,进行 XSS 攻击
  • DOM 型 XSS 攻击
    指的是直接通过操作 DOM 节点进行 XSS 攻击

# 如何防御 XSS 攻击

  • 前端程序员永远不要相信用户提交的数据,在进行拼凑 HTML 的时候,应该对字符串进行必要的转义,要考虑到拿来拼串的字符串可能带有恶意脚本。
  • 使用 CSP,CSP 的本质是建立一个白名单,这个白名单可以告诉浏览器哪些外部资源可以加载和执行,避免恶意代码的注入攻击。
  • 对敏感信息进行保护,比如对 cookie 使用 http-only ,使得脚本无法获取,或者使用验证码,避免脚本伪装成用户。

# CSRF 攻击

# 概念

CSRF 攻击是一种跨站伪造请求攻击,攻击者诱导用户进入一个第三方网站,然后这个第三方网站就会向被攻击网站发送跨站请求,如果用户保持了登录状态,那么攻击者就会利用这个登录状态,冒充用户执行一些操作。
其本质是利用 cookie 会在同源请求中携带发送给服务器,以此来实现用户的冒充。

# 常见的攻击类型

  • GET 类型的 CSRF 攻击,比如在 img 标签里面构造一个请求,当用户打开这个网站的时候,就会发送请求。
  • POST 类型的 CSRF 攻击,比如构建一个表单,然后隐藏他,当用户进入页面的时候自动提交表单
  • 链接类型的 CSRF 攻击,构造一个 a 标签,然后用户点击的时候触发攻击。

# 怎么防止 CSRF 攻击

  • 同源检测
    服务器更具请求头中的 origin 和 referer 来判断请求是否来自允许访问的站点,但是 referer 可以仿造,并且会把搜索引擎的链接也给屏蔽了
  • 利用 token 进行验证
    服务器向用户返回一个 token,然后用户每次请求的时候都要带 token,服务器再对这个 token 进行验证,缺点是给每个请求都加上 token 比较繁琐,并且如果请求经过负载均衡转移到了其他服务器,然后其他服务器的 session 中没有存储 token,就无法验证。
  • 利用 cookie 进行双重验证
    用户在访问页面的时候,服务器向其域名添加一个 cookie,然后用户再次向服务器发送请求的时候,将这个 cookie 添加到 url 的参数中,服务器根据 cookie 中的数据和参数中的数据进行对比来验证。
  • 在设置 cookie 属性的时候设置 Samesite,限制 cookie 不能被第三方使用。

# 中间人攻击

# 概念

中间人攻击是指攻击者分别与通信的两端建立联系,交换其所收到的数据,让通信的两端认为他们正在通过一个私密的链接直接与对方对话,攻击者可以拦截双非的对话,并插入新的内容。

# 攻击过程

  • 客户端发送请求到服务端,请求被中间人截获
  • 服务端向客户端返回公钥
  • 公钥被中间人截获,并生成一个伪造的公钥返回给客户端
  • 客户端收到伪造的公钥后,用伪造的公钥生成加密 hash 值发给服务器。
  • 中间人用自己的私钥解密获取真密钥,然后同时生成一个伪造的 hash 值发给服务器
  • 服务器用私钥解密获取假密钥,然后加密数据返回给客户端。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

ziMu 微信支付

微信支付

ziMu 支付宝

支付宝