我正在测试一个 Web 应用程序。我想编写一个XSS
显示警报的脚本"Hello"
。
我写的第一个脚本是:
<script >alert("Hello");</script >
但没有显示警报"Hello"
。我发现XSS
有效的脚本是
<SCRIPT >alert(String.fromCharCode(72,101,108,108,111,33))</SCRIPT >
我想知道为什么第一个脚本不起作用。
我正在测试一个 Web 应用程序。我想编写一个XSS
显示警报的脚本"Hello"
。
我写的第一个脚本是:
<script >alert("Hello");</script >
但没有显示警报"Hello"
。我发现XSS
有效的脚本是
<SCRIPT >alert(String.fromCharCode(72,101,108,108,111,33))</SCRIPT >
我想知道为什么第一个脚本不起作用。
该站点很可能会用 HTML 实体替换双引号,或者尝试以其他方式将它们转义,从而使它们不适用于 JavaScript。使用时,String.fromCharCode(...)
您不必使用任何引号,因此它会起作用。它获取字符串字符的 ASCII 代码列表,并在运行时从它们中创建一个字符串。所以不需要任何引用。
避免这种 XSS 的正确方法是替换<
为<
- 这样根本无法创建脚本标记。
请注意,在清理包含 HTML 的数据时>
,"
也&
应将 和 替换为各自的 HTML 实体!但是,只有在 HTML 属性中不能使用不受信任的数据(这是需要清理<
的地方)的情况下,才绝对需要击败 XSS 攻击"