0

サーバーが XSS セーフ テキストが追加された JSON 応答を返すというばかげた問題に陥っています。

サーバーは 2 種類の応答のみを返します。

  1. 必要な値を含む非表示の入力フィールドを持つ HTML ページ
  2. 好ましくはJSオブジェクトに変換できる値を持つJSON文字列。

問題は、JavaScript XSS 攻撃を防ぐために、JSON 応答が次のように作成されることです。

while(1);{
    "name": {
        "abc": "123",
        ...
        }
    }

したがって、これはparseerrorjQueryajaxメソッドに、したがってerrorコールバックに移動します。

これを修正するにはどうすればよいですか?

また、エラー関数にフックを入れて、JSON データを変更してみました。

error: function(jqXHR) {
    removeJSCode (jqXHR.responseText);
}

// ...

function removeJSCode(json) {
    .. Code to filter the response
}

しかし、これはうまくいきません。

4

1 に答える 1

0

jQuery の$.ajaxhasdataFilterプロパティは、その構成にあります。関数を渡すと、jQuery が ajax データを受け取った後、jQueryがそれに触れる前に実行されます。

この関数には、最初の引数として文字列応答が、2 番目の引数としてデータ型が提供されます。2 番目の引数はdataType、構成を渡したかどうかによって異なります。

そこで、.replace('while(1);','')jQuery が解析する関数から文字列を使用して返すことができます。

$.ajax({
    ...
    dataType : 'json',
    dataFilter : function(response,type){
      //if not JSON, don't do anything with it
      if(type !== 'json') return response;
      //otherwise, replace and return
      return response.replace('while(1);','');
    }
    ...
});
于 2013-08-23T14:21:02.857 に答える