DOM Jquery show() 函数中的 XSS

DOM XSS in Jquery show() function

我正在使用

在 Jquery 中显示 div
function{
....
$('#' + item + '-add').show(); 
...
}

div 的 id 是根据用户选择动态选择的。我们的代码扫描器将上面的行标记为基于 DOM 的 XSS。

项目 是从页面

上的隐藏字段中提取的
item  = $('.classname').val();

<input type="hidden" value="{{unit}}" class="classname">

我尝试了多个有效负载,但无法执行警报。这是一个有效的 DOM 漏洞吗?我需要在 item 中传递什么负载才能利用?

这不是被标记的原因 show()。这是因为 $('#' + item + '-add') 将用户输入附加到 jquery 选择器中。由于 jquery 可以像那样创建 html 标签,所以它非常适合 xss。代码扫描器无法真正判断后台发生了什么,因此它会标记它以供您检查。

在您的情况下,此用户输入前面直接带有 # 作为选择器的第一个字符。更好的是,如果用户无法设置 {{unit}} 的值,则不清楚它从何而来,但这并不重要。

我认为这是不可利用的(例如,在 Veracode 中“通过设计缓解”),但根据您感知的风险和威胁,您可能仍想将其更改为更强大的东西(重构代码以不包括jquery 选择器中的用户输入 - 如果 {{unit}} 不是用户输入,则可能已经是这种情况)。