2

出力エンコードをサーバー側ではなくクライアント側で行う必要があると誰も聞いています。私の質問は:それは文脈によって変化しませんか?XSSでクライアント側のエンコードをバイパスする方法

  1. クライアント側の出力エンコーディングが十分で、 をバイパスできない場合がありますか?
  2. encodeURIComponentのようなクライアント側のjs関数を使用してXSSを引き起こすURLをエンコードすると、攻撃者はこれを回避してXSSを引き起こす可能性がありますか?
  3. フィッシングはXSSによっても発生する可能性があります。もし私が少なくとも出力をエンコードすればフィッシングを防ぐことができますか?
+0

もう少し文脈を提供できますか?クライアントサイドのXSSは今何をエンコードしていますか? – deceze

答えて

2

簡単な答えは、XSSエンコーディングは、サーバーサイダーやクライアント側でデータをhtmlやjavascriptに入れる必要があることです。私は簡単にサーバー側のスクリプトタグに入れられたデータが正しくエンコードされていると想像できますが、クライアント側のjavascriptはその値を安全でない方法で使用してXSSの脆弱性を作り出しています。

信頼できないデータをWebページ(HTMLタグ、タグ内、CSSなど)に入れるときは、エンコードする必要があるOWASP XSS防止チートシートを参照してください。クライアント側に来ると、JavaScriptがXSS問題を引き起こさないようにする必要があります。これは、例えばDOMベースのXSS、または上記の例である可能性があります。

私の答えは、サーバー側とクライアント側の両方でエンコードする必要があるということです。

3番目の質問がどのように関連しているのか分かりません。フィッシングは非常に多くの異なる方法で発生する可能性があります。元のページなどをまったく模倣しているまったく別のドメインで。

編集:もう1つ。信じられたデータがエンコーディングなしでページサーバー側に置かれれば、クライアントサイドがそれを修正することはほとんどできません。おそらく、すでに遅れそうです。

1

Erlend答えが美しいです。私は、出力エンコーディングに関する私の知見を共有したいと思います。

出力側エンコーディングはサーバー側で行われる方がクライアント側よりも優れています。

あなたがOWASP Xss Prevention

から出力エンコーディングに関するより多くの知識を得ることができますし、あなたも、このクライアント側を行うことができます。 HTMLコンテキストで信頼できない(ユーザー指定の)データを使用する場合は、javascriptのネイティブapi innerText IE Docs(textContent for moz)またはhtmlエンティティ

に文字(<、>、 '、 "、/)をエンコードしてください。
関連する問題