Help us learn about your current experience with the documentation. Take the survey.

跨站脚本攻击

描述

跨站脚本攻击(XSS)是一种利用Web应用程序或系统将用户输入 当作标记或脚本代码执行的攻击。根据数据使用的具体上下文 对其进行编码非常重要。至少有六种上下文类型:

  • 在HTML标签内:<div>上下文 1</div>
  • 在属性内:<div class="上下文 2"></div>
  • 在事件属性内:<button onclick="上下文 3">按钮</button>
  • 在脚本块内:<script>var x = "上下文 4"</script>
  • 不安全的元素HTML赋值:element.innerHTML = "上下文 5"
  • 在URL内:<iframe src="上下文 6"></iframe><a href="上下文 6">链接</a>

脚本块本身可以通过多种方式编码。如果用户 输入必须写入script标签之外,请务必谨慎。

修复方案

应用程序中显示的用户输入必须经过编码、清理或验证, 以确保它不被当作HTML或JavaScript代码执行。注意不要 混合使用服务器端模板和客户端模板,因为服务器端不会对 {{ 7*7 }}这样的文本进行编码,这可能会执行客户端功能。

在将用户输入插入数据存储之前,不要对其进行编码。数据必须 根据其输出上下文进行编码。强制显示系统处理编码要安全得多。

考虑使用框架内置功能自动编码用户输入。如果无法 自动编码输入,请务必使用正确的输出编码。以下建议 是尽力而为,可能不适用于所有情况。

  • 在HTML标签内(不包括script)对以下内容进行编码:

    • < 转换为 &lt;
    • > 转换为 &gt;
    • ' 转换为 &apos;
    • " 转换为 &quot;
    • = 转换为 &#61;
  • 在属性内(不包括事件属性)对以下内容进行编码:

    • < 转换为 &lt;
    • > 转换为 &gt;
    • ' 转换为 &apos;
    • " 转换为 &quot;
    • = 转换为 &#61;
  • 在事件属性、脚本块和不安全的HTML赋值内对以下内容进行编码:

    • 制表符(\t)转换为 \t
    • 换行符(\n)转换为 \n
    • 垂直制表符(\v)转换为 \u000b
    • 换页符(\f)转换为 \f
    • 回车符(\r)转换为 \r
    • 等号(=)转换为 \u0061
    • 反引号(`)转换为 \u0060
    • 双引号(")转换为 \u0022
    • 与号(&)转换为 \u0026
    • 单引号(')转换为 \u0027
    • 加号(+)转换为 \u002b
    • 正斜杠(/)转换为 \/
    • 小于号(<)转换为 \u003c
    • 大于号(>)转换为 \u003e
    • 左括号(()转换为 \u0028
    • 右括号())转换为 \u0029
    • 左方括号([)转换为 \u005b
    • 右方括号(])转换为 \u005d
    • 左花括号({)转换为 \u007b
    • 右花括号(})转换为 \u007d
    • 反斜杠(\)转换为 \

    此列表不完整。根据上下文,您可能需要编码其他字符。

  • 在URL内:

    • 绝不允许在URL中打印用户输入。攻击者可能会注入javascript:...代码或恶意链接。

详情

ID 聚合 CWE 类型 风险
79.1 false 79 Active high

链接