2017-09-19 18 views
0

私のコードでcheckmarxをスキャンした後、以下のメッセージが表示されます。JavaScriptのクライアントDOM XSSの脆弱性を防ぐには?

... \ action \ searchFun.jsの23行目で実行するメソッドは、フォーム要素のユーザー入力を取得します。

この要素の値は、適切にサニタイズまたは検証されずにコードを通過し、最終的に../action/searchFun.jsの28行目の関数でユーザーに表示されます。これにより、DOM XSS攻撃が可能になる場合があります。

Checkmarxを満足させるために上記のシナリオをどのようにサニタイズすることができますか? スクリプトは次のように:

function searchAnnouncements(){ 
    $('#loadingAnnouncements').html('Loading...'); 
    var formData = $('form').serialize(); 

    jQuery.ajax({ 
    type: "post", 
    url: "bat.ajax", 
    data: formData, 
    cache: false, 
    dataType: "json", 
    cache: false, 
    success: function(json) { 
     $('div.block').unblock(); 
     $('#loadingAnnouncements').html(''); 
     if (json.resultSize > 0) 
     $('#searchResults').html(json.searchResult); 
    }); 
    }, 
} 
+1

これは、html行について不平を言うのですか?幸いなことに...もしあなたがサーバーからhtmlを返して表示しているのであれば問題になるかもしれません。それを避ける唯一の方法は、HTMLを送信してJSONを解析してDOMを構築することではありません。または、XSSリムーバースクリプトを見つけることができますが、それは物事を逃すことができます。または、警告を無視してコーヒーをお楽しみください。 – epascarello

答えて

1

あなたはDOMPurifyライブラリを使用することができます。 https://github.com/cure53/DOMPurify

これは、安全なHTMLタグを維持することによってXSS注入を防止する必要があります。

function searchAnnouncements(){ 
    $('#loadingAnnouncements').html('Loading...'); 
    var formData = $('form').serialize(); 

    jQuery.ajax({ 
    type: "post", 
    url: "bat.ajax", 
    data: formData, 
    cache: false, 
    dataType: "json", 
    cache: false, 
    success: function(json) { 
     $('div.block').unblock(); 
     $('#loadingAnnouncements').html(''); 
     if (json.resultSize > 0) 
     $('#searchResults').html(DOMPurify.sanitize(json.searchResult)); 
    }); 
    }, 
} 
+0

@TimothéMalahieude$()。テキストメソッドはDOMをレンダリングしません。この場合、プレーンテキストとして表示するのではなく、DOMに応答コンテンツをレンダリングしたいと考えています。 – Thusitha

+0

あなたが正しいです、私は少し速く返信しました。私は彼が実際にサーバーからHTMLを取得したとは思わなかった。私はちょうど私のdownvoteをキャンセルしました。 –

+0

@TimothéMalahieudeThat's alright mate – Thusitha

関連する問題