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)对以下内容进行编码:<转换为<>转换为>'转换为'"转换为"=转换为=
-
在属性内(不包括事件属性)对以下内容进行编码:
<转换为<>转换为>'转换为'"转换为"=转换为=
-
在事件属性、脚本块和不安全的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:...代码或恶意链接。
- 绝不允许在URL中打印用户输入。攻击者可能会注入
详情
| ID | 聚合 | CWE | 类型 | 风险 |
|---|---|---|---|---|
| 79.1 | false | 79 | Active | high |