2016-11-14 8 views
1

ゲームに非常に遅い -各プロパティの代わりにオブジェクトをエンコードする

私は今、自分のウェブサイトでXSSについて考え始めました。残念ながら、いくつかの場所で私はAjax経由で渡すオブジェクトを作成しました。

var params = {}; 
params.firstName = $("#firstName").val(); 
params.lastName = $("#lastName").val(); 

$.ajax({url:url, data:params}).done(); 

誰でも実行可能なJSで記述できます。さて、私が読んだから、私は簡単にこれを行うことによって、この状況を改善することができます

var params = {}; 
params.firstName = encodeURIComponent($("#firstName").val()); 
params.lastName = encodeURIComponent($("#lastName").val()); 

$.ajax({url:url}, data:params).done(); 

しかし、その代わりに、私が作成したすべての場所のオブジェクトを経由してencodeURIComponentでのすべてのフィールドをラップで---どのような方法があります各プロパティの代わりに単にパラメータを直接エスケープするには?

ご協力いただきありがとうございます。

更新:コンテンツタイプ:application/x-www-form-urlencoded; charset = UTF-8の場合、フォームデータは自動的にエンコードされます。

このような何かがうまくいく
+3

私はjqueryのは、実際にサーバ - 上のすべてのこれらの文字をエスケープ、しかし、セキュリティのために、このあなたのための – aw04

+1

を行いだと思いますクライアント側ではありません。クライアント上でそれをエスケープすると、XSSはより困難になりますが、それはまだ完全に可能であり、それほど難しくありません。 – nicovank

+0

@nicovank - はい、非常に良い点。すべてのエンドポイントも同様に保護されます。私はUIがXSSに対していくつかの措置を講じるべきだと思ったので、これを追加した措置としてやっていました。 – fumeng

答えて

-1

あなたがそうのように使用することができ
function encodeParams(data) { 
    Object.keys(data).forEach(function(key) { 
     data[key] = encodeURIComponent(data[key]); 
    }); 

    return data; 
} 

var params = encodeParams({ 
    firstName: $('firstName').val(), 
    lastName: $('lastName').val() 
}); 

ajax(...) 
関連する問題