5

現在、可能性のある XSS 攻撃から文字列を消去するために、jQuery ソリューションでこのメソッドを使用しています。

sanitize:function(str) {
    // return htmlentities(str,'ENT_QUOTES');
    return $('<div></div>').text(str).html().replace(/"/gi,'&quot;').replace(/'/gi,'&apos;');   
}

しかし、私はそれが十分に安全ではないと感じています。私は何かが恋しいですか?

ここで phpjs プロジェクトの htmlentities を試しました: http://phpjs.org/functions/htmlentities:425/

しかし、ちょっとバグがあり、いくつかの追加の特別なシンボルを返します. もしかして古いバージョンですか?

例えば:

htmlentities('test"','ENT_QUOTES');

プロデュース:

test&amp;quot;

しかし、次のようにする必要があります。

test&quot;

これをJavaScriptでどのように処理していますか?

4

3 に答える 3

3

文字列が HTML 形式のないプレーン テキストであることが想定されている場合は、既存のテキスト ノードのプロパティに.createTextNode(text)/assigning を使用するだけです。.dataそこに入力したものは常にテキストとして解釈され、追加のエスケープは必要ありません。

于 2012-07-02T11:07:55.450 に答える
3

はい、動的に JavaScript を使用します。文字列は信頼できないソースからのものです。

その後、手動でサニタイズする必要はありません。jQueryを使用すると、次のように書くことができます

​var str = '<div>abc"def"ghi</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​';

​$​('test').text(str);
$('test').attr('alt', str);

ブラウザがコードからデータを分離します。

例: http://jsfiddle.net/HNQvd/

于 2012-07-02T11:14:08.773 に答える
1

他の文字も引用する必要があります。

'
"
<
>
(
)
;

それらはすべて XSS 攻撃に使用できます。

于 2012-07-02T11:11:54.767 に答える