xss - 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>
解决方案
我假设您正在生成 JavaScript 代码。您不能使用 html 实体来编码或转义危险字符。如果您尝试对()
字符进行编码,则可能会产生 JS 语法错误。
不要试图通过查找来检测函数调用(…)
。这个简单的 hack 将绕过您的检查:
alert`"gotcha!"`
您可以引用alert(1)
使其成为字符串"alert(1)"
,但攻击者可以简单地将其作为输入提交:这", alert(1), "
将产生类似的内容:(并且仍然执行代码)
f1(768, "", alert(1), "", true);
在像您这样的情况下,我会考虑创建一个沙盒环境,其中代码可以在没有特权访问的情况下运行。
推荐阅读
- android - Fresco - 如何将图像保存到本地存储
- compilation - 纯 D 函数在运行时计算(不是编译时)
- html - 当数组中只有一个元素时不会触发更改事件
- javascript - 使用制表符 (HTML) 遍历子项
- batch-file - 每次按 Enter 时执行命令,直到我按一个键批量退出
- python - 在 Keras 模型中重塑编码器解码器
- php - php base_convert 不适用于非整数?
- jquery - 我无法从 ajax 调用中输出 json
- python-3.x - 如何修复“无法分配请求的地址”。甚至我在mac上用python尝试了许多不同的端口
- python - 执行 rnn 模型时出错。如何解决?