5

ユーザーがリッチ テキスト エディター (小さなエディター) にデータを入力し、データベースに保存しているデータを送信し、取得して他の動的 Web ページに表示する場合、ここでエンコードが必要なのはなぜですか。

誰かが javascript をリッチ テキスト エディターに貼り付ける可能性があるため、それが唯一の理由ですか? 他に理由はありますか?

4

9 に答える 9

16

理由はセキュリティ。

最も明白で一般的な理由は、クロスサイト スクリプティング(XSS) です。これが、サイトで目にする可能性のあるセキュリティ問題の根本原因であることが判明しました。

クロスサイト スクリプティング (XSS) は、悪意のある攻撃者が他のユーザーが表示する Web ページにクライアント側のスクリプトを挿入できるようにする、Web アプリケーションで通常見られるコンピューター セキュリティの脆弱性の一種です。攻撃者は、悪用されたクロスサイト スクリプティングの脆弱性を使用して、同一オリジン ポリシーなどのアクセス制御をバイパスできます。Web サイトで実行されるクロスサイトスクリプティングは、2007 年の時点でシマンテックが文書化したすべてのセキュリティ脆弱性の約 80% でし 。 、およびサイトの所有者によって実装されたセキュリティ軽減策の性質。

さらに、以下のコメントに示すように、サイトのレイアウトも台無しになる可能性があります。

Microsoft Anti-Cross Site Scripting Libraryが必要です

その他のリソース

http://forums.asp.net/t/1223756.aspx

于 2010-05-26T16:26:50.790 に答える
3

「エンコーディング」と「スクラブ」を混同していると思います。

ユーザーからのテキストを受け入れる場合は、HTMLとしてレンダリングする前に、HTMLとしてエンコードする必要があります。このように、テキスト

a < b

HTMLでエンコードされています

a &lt; b

HTMLブラウザで(ユーザーが入力したとおりに)次のようにレンダリングされます。

a < b

ユーザーからのHTMLを受け入れたい場合(この場合はそう聞こえます)、既にHTML形式になっているため、HTML.Encodeを再度呼び出す必要はありません。ただし、スクラブして、許可されていない特定のマークアップ(スクリプトブロックなど)を削除することもできます。

于 2010-05-26T16:43:40.190 に答える
3

あなたはいくつかの間違いを犯しています。

リッチテキスト エディターから HTML 形式のテキストを受け入れる場合、 を呼び出すことはできませんHtml.Encode。そうしないと、すべての HTML タグがエンコードされ、書式設定されたテキストではなく未加工のマークアップが表示されます。

ただし、XSS から保護する必要があります。

つまり、ユーザーが次の HTML を入力した場合:

<b>Hello!</b>
<script>alert('XSS!');</script>

タグを保持したいが、<b>タグをドロップ (エンコードしない) し<script>ます。同様に、インライン イベント属性 ( など) と Javascript URL ( など)
を削除する必要があります。onmouseover<a href="javascript:alert('XSS!');>Dancing Bunnies!</a>

ユーザーの HTML を厳密な XML パーサーで実行し、コンテンツを保存するときにタグと属性の厳密なホワイト リストを維持する必要があります。

于 2010-05-26T16:29:34.593 に答える
2

セキュリティが主な理由です。

于 2010-05-26T16:27:30.777 に答える
2

ユーザーは javascript コードやその他のいたずらを入力できるだけでなく、ページに特定の文字を表示するために HTML エンコードを使用する必要があります。データベースに "Nice Page :->" が含まれているため、ページが壊れることは望ましくありません。

また、コードをデータベースに入力する場合は、必ずデータベースへの入力を「サナタイズ」してください。

于 2010-05-26T16:27:47.373 に答える
1

はい、誰かが悪意のある文字列をリッチ テキスト エディターに入力した場合に、JavaScript が実行されないようにするためです。ただし、プレーン テキストの JavaScript だけが問題になるわけではありません。たとえば、これは XSS です。

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

さまざまな XSS オプションについては、こちらをご覧ください。http://ha.ckers.org/xss.html

于 2010-05-26T16:31:23.823 に答える
1

余談ですが..... MVC2 には新しい機能が実装されているため、HTML.Encode を呼び出す必要はありません。

ビューの構文を

MVC は自動的にエンコードします。それは物事をはるかに簡単/迅速にします。繰り返しますが、MVC2 のみ

于 2010-05-26T16:33:34.660 に答える
0

あなたの提案をする主な理由はあなたの出力を逃れることです。HTMLを受け入れて出力したいので、それはできません。あなたがする必要があるのは、安全でない、または少なくともあなたが望むものではない、ユーザーができることを除外することです。

そのために、AntiSamyを提案させてください。

ここでデモできます。

あなたがしていることには多くの継承リスクがあり、それを非常に慎重に検討する必要があります。

于 2010-05-26T20:30:16.493 に答える
0

もう 1 つの理由は、一部のユーザーがいくつかの終了タグ</div></table>を入力して、Web サイトのレイアウトを壊す可能性があることです。HTML 編集ツールを使用している場合は、エンコードせずにページに埋め込む前に、生成された HTML が有効であることを確認してください。これを行うには、サーバー側の解析が必要です。これを行うには、 HtmlAgilityPackを使用できます。

于 2010-05-26T16:33:25.723 に答える