从内部succcess
我的 AJAX 响应的方法,我的目标是以 XSS 安全的方式执行以下操作:
- 删除所有现有的
options
在选择框中。
- 替换同一选择框中的选项。
这是删除和替换选项的一种方法,但我对这种策略完全安全的 XSS 没有很高的信心:
success: function (data) {
$('#mySelBox').children().remove();
$.each(data, function (index, value) {
$('#mySelBox').append('<option value="' + value.id + '">' + value.description + '</option>');
});
}
具体来说:
- 我不确定是否
value.id
在这种情况下 XSS 安全吗?
- 我不确定是否
value.description
在这种情况下是安全的。
参考OWASP XSS 备忘单) https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html:
[确保]所有变量都经过验证,然后进行转义或清理,这被称为完美的注入阻力。
为此,我的问题如下:
- 逃生和消毒的可靠方法是什么
value.id
在上述情况下?
- 逃生和消毒的可靠方法是什么
value.description
在上述情况下?
我还发现这篇 XSS 预防文章 https://excess-xss.com/#xss-prevention。它让我意识到 XSS 预防是多么复杂,因为这个问题没有单一的解决方案:解决方案完全取决于上下文。
使用 DOM API 来创建<option>
元素:
$.each(data, function (index, value) {
var opt = document.createElement("option");
opt.setAttribute("value", value.id);
opt.textContent = value.description;
MY-SELECT-BOX.append(opt);
});
参考:
setAttribute
更新时被认为是安全的value
: 基于 DOM 的 XSS 预防 - 指南 #3 https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html#guideline-3-use-documentcreateelement-elementsetattributevalue-elementappendchild-and-similar-to-build-dynamic-interfaces
textContent
使用不受信任的数据填充 DOM 被认为是安全的:基于 DOM 的 XSS 预防 - 规则 #6 https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html#rule-6-populate-the-dom-using-safe-javascript-functions-or-properties
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)