首页 > 解决方案 > JavaScript 上下文中的 XSS 编码

问题描述

我在 C++ 代码中获取用户输入并将其传递给 JS 函数。它导致了XSS。下面的代码是问题的简化版本。如果你运行它,它会显示一个警报。HTML 编码会修复它还是有任何其他编码适用于这种情况?

<html>
<head>
<SCRIPT language="javascript">

function f1(id1, id2, flag){}

<!-- alert(1) is user input that was passed into this function  -->
f1(768, alert(1), true);

</SCRIPT>
</head><body></body></html>

标签: xss

解决方案


我假设您正在生成 JavaScript 代码。您不能使用 html 实体来编码或转义危险字符。如果您尝试对()字符进行编码,则可能会产生 JS 语法错误。

不要试图通过查找来检测函数调用(…)。这个简单的 hack 将绕过您的检查:

alert`"gotcha!"`

可以引用alert(1)使其成为字符串"alert(1)",但攻击者可以简单地将其作为输入提交:这", alert(1), "将产生类似的内容:(并且仍然执行代码)

f1(768, "", alert(1), "", true);

在像您这样的情况下,我会考虑创建一个沙盒环境,其中代码可以在没有特权访问的情况下运行。


推荐阅读