如何使用ESAPI解决JavaScript DOM XSS?

问题描述 投票:0回答:2
我们正在使用HP加固审计工作台3.80来评估我们应用中的漏洞。 强化将以下Extjs JavaScript代码标记为关键(“最坏”)DOM XSS漏洞:

function doAjaxCall(param1, param2, div) { var options = { url : url, params : { param1 : param1, param2 : param2 }, method: 'GET', success: function(response, options) { processResponse(response, div); }, failure: function(response, options) { doSomethingElse(); } }; Ext.Ajax.request(options); } function processResponse(response, div) { // SECURITY ISSUE HERE document.getElementById(div).innerHTML = '<br>' + 'An error occurred with status code ' + response.status + '<br><br>'; }

response

是从AJAX请求返回的响应。  
Fortify说:

Method“ ProcessResponse”将未验证的数据发送到第100行的Web浏览器,这可能导致浏览器执行恶意代码。

我了解问题以及为什么是一个问题。 我不知道的是如何用

esapi
对输入进行消毒。 我们正在成功地将ESAPI用于Java代码中的问题,但我不确定在JavaScript中解决此特定问题。 我确实找到了这个JavaScript Esapi库,

SAPI4JS,但是我在一个极高的安全环境中工作,我无法访问此库。 我如何使用esapi对响应进行消毒?

eDit 每个用户请求添加了完整的AJAX请求代码。

检查snyk的示例:

var ESAPI = require('node-esapi'); document.body.style.color = 'url(<%=ESAPI.encoder().encodeForJS(ESAPI.encoder().encodeForURL(color))%>)';

javascript ajax extjs xss esapi
2个回答
0
投票

vulnerable:

document.write("Site is at: " + document.location + ".");
不脆弱: org.owasp.esapi.esapi.initialize(); document.write($ esapi.encoder()。encodeforhtml(“站点为:”+document.location));
您需要在使用之前将其初始化。 OWASP网站上有文档。

@georgestocker是错误的。基于DOM的XS通常是最危险的,因为它无法处理服务器端。一个完美的示例是上述,可以通过在某些代码之前使用#来轻松利用它。
此外,大多数客户端XSS过滤器也可以通过使用OnError绕过。
ey3


-2
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.