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>';  
}

responseAJAX リクエストから返されるレスポンスです。

Fortify 言います:

メソッド「processResponse」は、検証されていないデータを 100 行目で Web ブラウザーに送信します。これにより、ブラウザーが悪意のあるコードを実行する可能性があります。

問題とその理由を理解しています。私が知らないのは、ESAPIで入力をサニタイズする方法です。Java コードの問題には ESAPI を使用していますが、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 に答える