srcなどの属性でXSS攻撃から保護する方法は?

c# html-agility-pack security xss

質問

だから私はホワイトリストでhtmlの敏捷性を使ってC#htmlサニタイザを構築してきました。次のような場合を除いて正常に動作します。

<img src="javascript:alert('BadStuff');" />
<img src="jav&#x09;ascript:alert('BadStuff');"> 

私はsrc属性を許可したいのですが、明らかに悪意のあるものではありません。私が調べたすべてのものは、タグとその属性のホワイトリストを推奨しています。このようなことをどうやって処理しますか?私はこれが新しいブラウザーではうまくいかないことを知っていますが、私はセキュリティにあまり精通していませんし、攻撃者ができる他の巧妙なものもあると確信しています。

受け入れられた回答

クロスサイトスクリプティング(XSS)攻撃は、クライアント側のスクリプトコードを注入することにより、Webページの検証における脆弱性を悪用します。 Webアプリケーションがクロスサイトスクリプティング攻撃を受けやすい一般的な脆弱性には、入力の適切な検証、出力のエンコードの失敗、共有データベースから取得したデータの信頼性の低下などがあります。クロスサイトスクリプティング攻撃からアプリケーションを保護するには、すべての入力が悪意のあるものと仮定します。すべての入力を制限して検証します。潜在的にHTML文字を含む可能性があるすべての出力をエンコードします。これには、ファイルおよびデータベースから読み取られたデータが含まれます。

クロスサイトスクリプティング攻撃の最も深刻な例の1つは、攻撃者が信頼できるサイトへのアクセスを提供する認証Cookieを取得するスクリプトを作成し、攻撃者が知っているWebアドレスにそのCookieを投稿するときに発生します。これにより、攻撃者は正当なユーザーの身元情報を偽装し、Webサイトへの不正なアクセスを得ることができます。

Webアプリケーションをクロスサイトスクリプティング攻撃の影響を受けやすい一般的な脆弱性には次のようなものがあります。

  • 入力の制約と検証に失敗しました。
  • 出力のエンコードに失敗しました。
  • 共有データベースから取得したデータを信頼する。

ガイドライン

クロスサイトスクリプティング攻撃を防止するための最も重要な2つの対策は次のとおりです。

  • 入力を制限する。
  • エンコード出力。

ステップの要約

クロスサイトスクリプティングを防止するには、次の手順を実行します。

手順1. ASP.NET要求の検証が有効になっていることを確認します。

ステップ2. HTML出力を生成するASP.NETコードを確認します。

ステップ3. HTML出力に入力パラメーターが含まれているかどうかを判別します。

ステップ4 。潜在的に危険なHTMLタグと属性を確認します。

ステップ5 。対策を評価する。

詳細は第2の参考文献を参照してください。

参考文献:

クロスサイトスクリプティングの説明:XSS攻撃を防ぐ方法

How To:ASP.NETでのクロスサイトスクリプティングの防止


人気のある回答

サニタイズして入力を適切に処理するならば、src属性を安全に許可することができます。これを行うには、有効なURL文字のホワイトリストでまずそれを消毒し、 正規化して有効な画像を指していることを確認する必要があります。

あなたが言及したホワイトリストは、最初のステップ(そして、それで重要なもの)です。ホワイトリストを実装するには、URLに有効でないすべての文字を削除します。また、URLが適切に構成されていること、つまり、ユーザーがアクセスできる有効なリソースを指していることを確認します。たとえば、 file://sensitive.txtなどを渡して、サーバー上のローカルファイルにアクセスしてはいけません。 httpまたはhttpsが使用されるべき唯一のプロトコルである場合、URLがそれらで始まることを確認してください。余分な妄想症の場合は、それが改ざんされていることが明らかであるため、要求を完全に拒否することができます。ホワイトリスト作成は重要ですが、ホワイトリスト作成だけではその機能を保護することはできません

正規化は重要です。なぜなら、多くの攻撃は最終的に特定の場所に移動するURLを送信することに依存しますが、コンピュータの本来の欠点を悪用してはいけないことを取得する必要があるからです。これは、同じリソースへの重複したパスを排除してパフォーマンスを向上させるのにも役立ちます(または、最後にチェックしてから変更されていない既知のファイルを再チェックしないでパフォーマンスを向上させることは少なくとも可能です。最後に修正された日付を偽装することが可能になり、攻撃者はすでに「チェックして信頼していた」後に悪質なファイルを入れ替えることができます)。

有効なイメージを指していることを確認するには、ファイルを開き、最初の数バイトを読み込みます。単にファイルの拡張子を信頼するのではなく 、ファイルを開く前にまずチェックしてください(パフォーマンスとセキュリティのために)。すべてのイメージフォーマットには、確認できるバイトパターンがあります。 最初見たいのは、JPEGです。悪意のあるユーザーが適切なヘッダーを含むイメージファイルにシェルコードやその他の攻撃コードを入れてしまう可能性はありますが、はるかに難しいです。これはパフォーマンスのボトルネックになりますので、これを実装すると適切に計画してください。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ