是否可以在以下上下文中使用 jQuery 的 .attr(attributeName, value) 方法执行 XSS 攻击?

Is it possible to perform a XSS attack using jQuery's .attr(attributeName, value) method in the following context?

给定以下 html 片段,它是在 html 文件中静态键入的:

<div id="div001" title="abc">Test</div>

当攻击者可以在以下上下文中为变量 unsafe_string 提供任意值时,是否可以执行 XSS 攻击:

$('#div001').attr("title", unsafe_string);

我的问题是:是否可以突破属性值,从而注入并执行一些恶意代码?攻击者只能控制 unsafe_string,没有其他控制权。

例如,我可以观察到

$('#div001').attr("title", '"');

结果

$('#div001').attr("title") = "\""

是的,此代码中存在许多漏洞:

  1. 当你执行$('#div001').attr("title", unsafe_string);
  2. 时执行恶意javascript

示例: jsp代码:$('#div001').attr("title", ${unsafe_string});

当 unsafe_string 值为 "");alert('do nasty stuff')

生成js代码:$('#div001').attr("title", "");alert('do nasty stuff')

编辑: jquery 通过转义危险字符

保护您免受这 2 种攻击
  1. 在属性值(标题)中注入恶意javascript
  2. 在属性值html中注入

您必须对不安全的字符串进行转义以防止所有这些(并且在将不安全的字符串保存到您的应用程序中时,您还必须对其进行验证)。我建议为此使用现有的安全库,具体取决于您的技术堆栈。在这里查看更多: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet


编辑: 4.如果你把你的js代码放在html文件中,你也容易受到html注入 示例:jsp 代码:

<body>
    <script>
    $(document).ready(function(){$('#mydiv').attr( "title", ${unsafe_string})});
    </script>
    <div id="mydiv" title='abc'>
        something
    </div>

当 unsafe_string 是字符串时 破坏我的网站 您的页面看起来像

有关如何针对 XSS 进行测试的更多详细信息:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

否,因为 jQuery 负责转义 unsafe_string 的内容,因此无法突破属性值。通过 jQuery 的 attr() 函数将 html 或 javascript 代码写入属性值将转义字符串,并且不会被解释为 html 或作为 [=18 执行=]代码。

可以通过查看 $('#div001')[0].outerHTML 来检查转义行为。