2

Web サイトのユーザーが再表示するときに入力したデータを HTML エンコードすると、CSS の脆弱性を防ぐことができますか?

また、ユーザー入力をサニタイズして、独自のルーチンを作成する必要がないようにするツール/製品はありますか。

4

4 に答える 4

6

この質問にはさまざまな微妙な点がありますが、一般的な答えはイエスです。

  • Web サイトの安全性は、データを配置する場所に大きく依存します。正当なテキストとして置くと、攻撃者が XSS を実行する方法は本質的にありません。属性に入れる場合、引用符をエスケープするのを忘れたり、マルチバイトの整形式をチェックしないと、攻撃を受ける可能性があります。JSON 変数に入れる場合、適切にエスケープしないと任意の JavaScript につながる可能性があります。などなど。コンテキストは非常に重要です。

  • 他のユーザーは、XSS 除去または XSS 検出機能の使用を提案しています。私は、XSS の除去はユーザーフレンドリーでないと考える傾向があります。<foo@example.com> のような電子メール アドレスを投稿し、XSS 削除関数がそれを HTML タグと判断すると、このテキストが不思議なことに消えてしまいます。XSS ディスカッション フォーラムを運営している場合、人々のサンプル コードが削除されることは望ましくありません。検出はもう少し賢明です。アプリケーションが誰かが攻撃していることを認識できる場合、IP アドレスまたはユーザー アカウントを禁止できます。ただし、この種の機能には注意が必要です。罪のない人々は銃撃戦に巻き込まれる可能性があり、また巻き込まれるでしょう。

  • 検証は Web サイトのロジックの重要な部分ですが、エスケープとは無関係でもあります。何も検証せずにすべてを回避する場合、XSS 攻撃はありませんが、誰かが自分の誕生日が「音楽が死んだ日」であると言うことができ、アプリケーションは賢明ではありません。理論的には、特定のデータ型に対して十分に厳密な検証を行うことで、エスケープのすべての作業 (数値、列挙などを考えてください) を実行できますが、いずれにせよそれらをエスケープすることは、多層防御の一般的な良い方法です。100% であっても整数です。そうではないかもしれません。

  • 平文をエスケープすることは些細な問題です。あなたの言語が関数を提供しない場合は、 、 、 、および を対応する HTML エンティティに置き換える文字列<>うまく"いき'ます&。(UTF-8 を使用していない場合にのみ、他の HTML エンティティが必要です)。HTML タグを許可することは自明ではなく、独自のスタック オーバーフローの質問に値します。

于 2008-10-21T21:01:38.557 に答える
0

答えはノーです。エンコーディングは十分ではありません。XSS の最善の保護は、すべての受信データの「ホワイトリスト」検証と、すべての出力データの適切なエンコードを組み合わせることです。検証により攻撃の検出が可能になり、エンコーディングにより、成功したスクリプト インジェクションがブラウザーで実行されるのを防ぎます。.NET を使用している場合は、このライブラリを確認できますhttp://msdn.microsoft.com/en-us/library/aa973813.aspx

いくつかのチート シートをチェックして、保護をテストすることもできます: http://ha.ckers.org/xss.html

よろしく、

ビクター

于 2008-10-21T20:48:55.883 に答える
0

HtmlEncoding 入力は、HTML がページにレンダリングされないようにすることで、かなりの部分を取得します。

データをサニタイズするために、言語項目に応じてそこに存在する必要があります。.NET では、Server.HtmlEncode(txtInput.Text) を使用して、txtInput という名前のテキスト ボックスからデータを入力できます。

他の人が言及しているように、真に保護するにはより多くのアイテムが必要です。

于 2008-10-21T20:35:32.353 に答える
0

HTML のエンコードが始まりです...すべての XSS 攻撃から保護されるわけではありません。

PHP を使用している場合は、サイトで使用できる優れた関数を次に示します: Kallahar の RemoveXSS() 関数

PHP を使用しない場合は、少なくともコードに十分なコメントが付けられ、各セクションの目的が説明されているため、別のプログラミング言語に適用できます。

于 2008-10-21T20:35:56.690 に答える