我使用 AJAX .get()
方法为“Product Search”应用程序加载HTML,并将其呈现到HTML节点($searchModalBody
)中:
productSearch: function productSearch(e, element) {
var $searchModal = $('#product-search-modal');
var $searchModalBody = $searchModal.find('.modal-body');
var url = $searchModal.data('url');
...
$.get(url, {
fromQuote: true, customerNumber: custNumber, hasQtyField: false
}).done(function (response) {
$searchModalBody.html(response);
})
如何净化响应以避免任何DOM XSS?
我读到过.text()
比.html()
更受欢迎,但是由于我加载的是HTML,.text()
将完全转义。
如果我错过了什么,我很抱歉。我一直在努力阅读XSS预防,但没有找到任何东西。我可能只是不完全明白我需要做什么/寻找什么。
1条答案
按热度按时间q8l4jmvw1#
您应该避免使用
.html()
和.innerHTML
,因为正如您提到的那样,它们会带来安全风险。jquery文档:
不要使用这些方法插入从不受信任的源(如URL查询参数、Cookie或表单输入)获取的字符串。这样做可能会引入跨站点脚本(XSS)漏洞。请在向文档添加内容之前删除或转义任何用户输入。
innerHTML
上的MDN:注:如果要插入的字符串可能包含潜在的恶意内容,则会存在安全风险。插入用户提供的数据时,应始终考虑改用
Element.SetHTML()
,以便在插入内容之前对其进行清理。因此,使用
setHTML
可能更安全一些,演示:此外,OWASP建议使用library:
HTML清理将从变量中剥离危险的HTML并返回安全的HTML字符串。OWASP建议使用DOMPurify进行HTML清理。
还有一些需要进一步考虑的事项:
另请注意,有一个
Sanitizer
API,即not yet well supported一个三个三个一个