2013-02-08 27 views
5

私はASP.Net C#+ jQuery ajaxウェブサイトプロジェクトに取り組んでいます。私はxss攻撃を防止しようとしており、以下のことは完全なアプローチではないことを知っていますが、これは少なくともユーザーが空き文字列を入力するときにはHtmlEncodeを使用する必要があります。私は本当に正しいことをしているかどうかを親切にチェックする人です。XSS攻撃を防ぐ

ページコントロールの1つが「説明」テキストボックスであり、ユーザーが自社製品の説明に使用する「フリー」文字列を入力できるシナリオがあるとします。 xss攻撃の入力を防ぐために、サーバーサイドのページメソッドでは、HtmlUtility.HtmlEncode()を使用して「説明」テキストを折り返したので、文字列はデータベースに入る前に純粋なテキストとして解釈されます。つまり<script>&gt;script&lt;になります。

次の部分は、私が疑問に思っていることです - htmlエンコードされたテキストをユーザーに返す前にどう処理するのですか?

ユーザが入力された説明テキストを表示したい場合、ウェブサイトはデータベースから検索し、それを印刷します。

説明にhtmlデコードを実行して、ユーザーにこれらの文字が表示されないようにするのは論理的ですか?&gt;&lt;文字ですか?最初にHtmlEncodeを使用する目的を無効にしますか?そしてもしそうなら、正しいjQuery行をデコードして、ユーザーにテキストを印刷するのですか?

$("#txtDescription").val($(this).html(obj.Description).text();

テキストがデータベースに入るコードしていない非常に非常に多くの

答えて

1

対処する各文字列のコンテンツタイプと、それがどこから来たのか(安全な送信元か信頼できない送信元かに関係なく、両方が同じコンテンツの文字列である2つの文字列を連結するときタイプと信頼レベル。

<script>&gt;script&lt;なり、すなわち私がHtmlUtility.HtmlEncode()を使用して「説明」テキストを包み、その文字列がデータベースに入る前に、純粋なテキストとして解釈されます。

ここ

HtmlEncodeの出力が危険な含まれていないことが保証されているので、あなたが(説明フィールドは、プレーンテキストの文字列であると言って、何あなたは、データベースに保存していることは、安全なHTMLの文字列でいるように聞こえますコード)。

これは、途中でコンテンツをエンコードする際の最初の問題を示しています。サーバーに送信するSQL文字列を作成している場合、HTML形式で事前にエンコードしても、SQLインジェクションから保護されるわけではありません。 SQLプリペアド・ステートメントを使用するとSQLに対してこれを克服するのに良い方法ですが、プリエンコードではすべてのコンテキストで文字列を安全にすることはできません。

私が疑問に思っている部分は、htmlエンコードされたテキストをユーザーに返す前にどう扱うかです。

ユーザが入力された説明テキストを表示したい場合、ウェブサイトはデータベースから検索し、それを印刷します。

ユーザーが安全なHTMLを受け取っていて、安全なHTMLの文字列を持っている場合は、そのユーザーに送信することができます。

ユーザーがプレーンテキストのメールを受信して​​いる場合は、データベースに保存されている安全なHTMLをプレーンテキストに変換する必要があります。

RSSを受け取っている場合は、XMLの部分文字列を使用してRSSを作成する必要があります。

Contextual auto-escaping出力時に値が正しくエンコードされているかどうかを確認するのに役立ちます。

6

、ありがとうございました。生の濾過されていない形で保管してください。文字列がHTML対応のコンテキストに出力されている場合(ブラウザへの出力など)、HTMLの文字列をエンコードするだけです。

+0

こんにちはKolink、あなたの返信ありがとう:)元のフィルタリングされていない形式でテキストをデータベースに保存する方が良いでしょうが、システムではデータベースに入る前に折り返しが必要になります。ユーザー – user1487182

+0

私たちは奇妙な文字をユーザーに印刷することになっていますか、印刷する前にまず文字を解読するのは通常の習慣ですか?もしそうなら、その部分をどのように扱うのですか?あなたがエンコードしない理由誰かが述べるならばそれが役立つだろうそんなに – user1487182

+1

をありがとう、私は戻って、テキストボックスにこれらの値を印刷する必要があり、それは" > <スクリプト>警告(' XSS ')< /スクリプト>のようなものを示していますテキストはデータベースに入ります...特に答えは5票を上回っています(ページのほとんど)。 – EleventyOne

0

httputility.htmlencodeの代わりにAntiXss libraryを使用することをおすすめします。より明確にするために、ドキュメントを読むことを検討してください。 AntiXSSライブラリw.r.tの入力エンコーディングには、より広いオプションがあります。このdiscussionで述べたように、より安全なホワイトリストベースのアプローチに従います。

関連する問題