如何使用 ESAPI 解析 JavaScript DOM XSS

How to use ESAPI to resolve JavaScript DOM XSS?

本文关键字:DOM XSS JavaScript 解析 何使用 ESAPI      更新时间:2023-09-26

我们正在使用 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 中解决这个特定问题。

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

如何使用 ESAPI 清理响应?

编辑

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

易受攻击:

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

不易受攻击: org.owasp.esapi.ESAPI.initialize(); document.write($ESAPI.encoder().encodeForHTML("Site is at: "+document.location));

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

@GeorgeStocker错了。基于 dom 的 xss 通常是最危险的,因为它无法在服务器端处理。一个完美的例子是上面的,可以通过在某些代码之前使用 # 轻松利用它。

此外,大多数客户端 xss 筛选器都可以通过使用 onerror 来绕过。

EY3