前端

XSS(跨站脚本攻击)

常见类型

  • 存储型XSS
    恶意代码被永久存储在目标服务器上,如数据库、论坛帖子。每次用户访问受感染页面时,都会触发恶意代码。

  • 反射型XSS
    恶意代码通过URL参数等方式立即返回给用户并执行,通常依赖于用户点击特定链接。

    • 示例: http://example.com/search?q=<script>alert('XSS')</script>
  • DOM型XSS

    • 攻击者通过某种方式将攻击代码植入被害者网页中
      • 如网页运行通过如下代码将搜索内容写入搜索框document.getElementById("searchResults").innerHTML = input
      • 攻击者把恶意代码放在input中
        • 可能是通过URL传递恶意代码
    • 用户访问网页的时候,网页把攻击代码写入到DOM中,直接在客户端执行的恶意代码,不经过服务器返回。

防范措施

  • 输入验证与过滤
    对用户输入进行严格验证和过滤,避免注入恶意脚本。

  • 输出编码
    在输出数据到HTML、JavaScript、URL等位置时进行适当编码,防止脚本被执行。

  • 使用[use::CSP](Content Security Policy)

  • 避免使用危险函数
    innerHTMLdocument.write等易导致XSS的函数,应尽量使用更安全的替代方案,如DOM操作API。