1

我们正在使用 HP fortify Audit Workbench 3.80 来评估我们应用程序中的漏洞。Fortify 将以下 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 请求返回的响应。

强化 说:

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

我理解这个问题以及为什么它是一个问题。我不知道如何使用ESAPI清理输入。我们成功地使用 ESAPI 来解决我们 Java 代码中的问题,但我不确定在 JavaScript 中解决这个特定问题。

我确实找到了这个 JavaScript ESAPI 库ESAPI4JS,但是我在一个安全性极高的环境中工作,而且我无法访问这个库。

如何使用 ESAPI 清理响应?

编辑

为每个用户请求添加了完整的 ajax 请求代码。

4

1 回答 1

-2

易受伤害的:

document.write("Site is at: " + document.location + ".");

不易受攻击:org.owasp.esapi.ESAPI.initialize(); document.write($ESAPI.encoder().encodeForHTML("站点位于:"+document.location));

您需要在使用前对其进行初始化。owasp 的网站上有文档。

@GeorgeStocker 是错误的。基于 dom 的 xss 通常是最危险的,因为它无法在服务器端处理。一个完美的例子就是上面的例子,可以很容易地通过在一些代码前使用 # 来利用它。

大多数客户端 xss 过滤器也可以通过使用 onerror 绕过。

ey3

于 2015-01-29T16:57:48.083 回答