XSS 防止传递给 JS 代码文件的参数
XSS preventing for parameters passed to JS code file
我有以下流程:URL 带有查询参数,运行 在服务器端有一些逻辑,然后使用模板引擎生成存根 HTML 页面与
- 包含一个 javascript 文件,它执行主要逻辑。
<script>
包含 JS 对象的标签,该 JS 对象具有此 JS 代码的参数,部分取自之前的查询参数。
现在我想清理接收到的参数,以防止 XSS 注入。问题是其中一个参数有一个标记,所以我不想对验证过于严格(只是不允许所有可能的 XSS 字符听起来太严格),但我发现处理的大多数库纯 HTML,而不是 JS 代码(在 <script>
标签内)。当我阅读所有正则表达式解决方案时,我也感到有点不安,因为我在处理安全问题时习惯于信任开源 库 (具有单元测试而不是一堆正则表达式).
对图书馆和可能的方法有什么建议吗?我们运行在JVM环境中。
假设您想将参数分配为字符串,例如:
{
...
x: '[PARAMETER]'
}
您要确保 [PARAMETER] 不会超出引用的字符串。
在这种情况下,您需要转义的是 '
字符和结束的 </script>
标记。注意:考虑 "escape-the-escape" 攻击,攻击者发送字符串 \'
,它被转义为 \'
,它返回到 '
(你从哪里回来了你开始了)。
正如 OWASP 指出的那样,
通常更安全
escape all characters less than 256 with the \xHH format
我邀请您阅读有关 XSS 攻击的 OWASP 页面,特别是 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_JavaScript_Data_Values
最简单、最简单且因此更安全的方法是使用 data attributes 表示用户提供的动态值。
这样你只需要担心 HTML 编码,none 复杂的十六进制实体编码 (\x00
) 即 OWASP recommend.
例如,您可以:
<body data-token="@param.token" />
其中 @param.token
将输出查询字符串参数的 HTML 编码版本。例如page?token=xyz"
会输出
<body data-token="xyz"" />
这将减轻您对 XSS 漏洞的担忧。
然后你可以使用 JQuery to easy retrieve the data attribute values in your JavaScript:
var token = $("body").data("token");
简单安全。
我有以下流程:URL 带有查询参数,运行 在服务器端有一些逻辑,然后使用模板引擎生成存根 HTML 页面与
- 包含一个 javascript 文件,它执行主要逻辑。
<script>
包含 JS 对象的标签,该 JS 对象具有此 JS 代码的参数,部分取自之前的查询参数。
现在我想清理接收到的参数,以防止 XSS 注入。问题是其中一个参数有一个标记,所以我不想对验证过于严格(只是不允许所有可能的 XSS 字符听起来太严格),但我发现处理的大多数库纯 HTML,而不是 JS 代码(在 <script>
标签内)。当我阅读所有正则表达式解决方案时,我也感到有点不安,因为我在处理安全问题时习惯于信任开源 库 (具有单元测试而不是一堆正则表达式).
对图书馆和可能的方法有什么建议吗?我们运行在JVM环境中。
假设您想将参数分配为字符串,例如:
{
...
x: '[PARAMETER]'
}
您要确保 [PARAMETER] 不会超出引用的字符串。
在这种情况下,您需要转义的是 '
字符和结束的 </script>
标记。注意:考虑 "escape-the-escape" 攻击,攻击者发送字符串 \'
,它被转义为 \'
,它返回到 '
(你从哪里回来了你开始了)。
正如 OWASP 指出的那样,
通常更安全escape all characters less than 256 with the \xHH format
我邀请您阅读有关 XSS 攻击的 OWASP 页面,特别是 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_JavaScript_Data_Values
最简单、最简单且因此更安全的方法是使用 data attributes 表示用户提供的动态值。
这样你只需要担心 HTML 编码,none 复杂的十六进制实体编码 (\x00
) 即 OWASP recommend.
例如,您可以:
<body data-token="@param.token" />
其中 @param.token
将输出查询字符串参数的 HTML 编码版本。例如page?token=xyz"
会输出
<body data-token="xyz"" />
这将减轻您对 XSS 漏洞的担忧。
然后你可以使用 JQuery to easy retrieve the data attribute values in your JavaScript:
var token = $("body").data("token");
简单安全。