0%

XSS - 跨站脚本攻击

目录

XSS 攻击全称跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS, XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。(任何用户输入都是不可信的)

分类

反射型

  • 只是简单地把用户输入的数据 “反射” 给浏览器, 反射型 XSS 也叫“非持久型 XSS”(Non-persistent XSS)。

  • 比如:直接将用户输入用于网站页面,URL 中的 Query, Params 或者 用户输入的信息直接拼接 DOM 节点等

  • <a href="http://localhost:3000/?name=<script>alert('hello')</script>"
      >点击进入网站并进行XSS攻击</a
    >
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
      如果目标网站直接将 url 中的 query.name 渲染到页面上,就会被攻击

    ### 存储型

    - 存储型 XSS 会把用户输入的数据“存储”在服务器端(数据库)。存储型 XSS 通常也叫做“持久型 XSS”(Persistent XSS)

    - 比如:用户发表的文章或评论中,可以输入恶意代码,发表成功存入数据库之后每个用户访问该文章或评论时,都会调用恶意代码,被劫持。

    ## 防御

    常见的 Web 漏洞如 XSS,SQL 注入等,都要求攻击者输入一些特殊字符,所以可以通过输入检查,过滤掉这些字符。

    - React、Vue 等都有对 XSS 进行处理

    - React `dangerouslySetInnerHTML` 会有风险

    - Vue `v-html` 会有风险

    - GitHub 上有比较成熟的 XSS 库,可参考 [GitHub - XSS](https://github.com/leizongmin/js-xss)

    - 防止 Cookie 被劫持

    Cookie 中设置 HttpOnly 之后,JS 将无法读取 Cookie 信息

    - 对下列特殊字符进行过滤或者编码,可以简单的防范
    & &amp; < &lt; > &gt; " &quot; ' &#39