我正在运行Synopsys的Coverity扫描工具,它说下面的功能需要净化“成功”。我尝试过DomPurify、DomParser等,它所做的就是破坏UI。任何帮助都会很好。
$.ajax({
url: window.paramFormRoleView.UrlGetIsoData,
success: function (response) {
bindIsosDropDown(response);
}
});以下是bindIsosDropDown的函数
函数bindIsosDropDown(isoData) {
var isoDropDownHtml = "";
if (window.existingAssociatedIsos !== null && window.existingAssociatedIsos !== "") {
var existingAssociatedIsosArr = window.existingAssociatedIsos.split(',').map(Number);
$(isoData).each(function (index, iso) {
isoDropDownHtml += '<option value="' + iso.IsoId + '"' + (($.inArray(iso.IsoId, existingAssociatedIsosArr) > -1) ? 'Selected' : '') + '>' + iso.LegalName + '</option>';
});
} else {
$(isoData).each(function (index, iso) {
isoDropDownHtml += '<option value="' + iso.IsoId + '">' + iso.LegalName + '</option>';
});
}
$("#ddlIsoList").html(isoDropDownHtml);
$(".multiselect").multiselect({ noneSelectedText: 'Select ISO' });
manageIsosAndRoles();}
发布于 2022-07-01 05:12:37
问题
bindIsosDropDown函数不安全。它接受isoData作为参数,但它直接来自网络,因此它被“污染”(可能在攻击者控制下)。然后,它将isoData的元素连接起来,以便在以下代码行(和其他代码行)中生成HTML:
$(isoData).each(function (index, iso) {
isoDropDownHtml += '<option value="' + iso.IsoId + '"' + ...;
});例如,如果isoData是(在JSON语法中):
[
{ IsoId: "\"><script>alert('Gotcha!')</script><option value=\"" }
]那么isoDropDownHtml将是:
<option value=""><script>alert('Gotcha!')</script><option value="" ...因此,浏览器将执行攻击者的有效负载(这里只提供一条alert消息,但可能是任何恶意代码)。
解决方案
通常,您希望转义可能位于受污染数据中的任何HTML元字符,这样它们就不能脱离语法上下文,在这种情况下,语法上下文是一个双引号属性值。Escaping HTML strings with jQuery的问题对具体的方法有几个建议。
假设您使用这些建议之一,并因此有一个名为escapeHtml的函数来转义HTML,您可以这样使用它:
$(isoData).each(function (index, iso) {
isoDropDownHtml += '<option value="' + escapeHtml(iso.IsoId) + '"' + ...;
// ^^^^^^^^^^
});如果您现在研究一下前面示例isoData发生的情况,您将看到IsoId被正确地编码为一个HTML属性值,因此不会交付可执行的Javascript。
请注意,您必须在可能处理它的应用程序中的任何地方转义像这样的受污染的数据。仅仅修复一个实例,甚至修复Coverity (或任何工具)能够检测到的所有实例都是不够的。如果问题中的代码是典型的应用程序,那么可能会有更多的地方易受攻击,因此有必要进行仔细和系统的审查。
https://stackoverflow.com/questions/72792794
复制相似问题