3

いつ電話しますMicrosoft.Security.Application.AntiXss.HtmlEncodeか?ユーザーが情報を送信するときにそれを行いますか、それとも情報を表示するときに行いますか?

名、姓、市、州、郵便番号などの基本的なものはどうですか?

4

4 に答える 4

12

情報を表示しているときに行います。入力した元のファイルを保持し、Webページに表示するために変換します。Excelにエクスポートするなど、他の方法で表示していたとします。その場合は、保存したオリジナルをエクスポートする必要があります。

すべての文字列をエンコードします。

于 2008-11-14T02:40:43.620 に答える
4

データをデータベースに配置する直前であろうと、画面に表示する直前であろうと、可能な限り最後の瞬間にのみデータをエンコードまたはエスケープする必要があります。エンコードが早すぎると、誤って二重エンコードされるリスクがあります(&初心者のWebサイトでよく見られます-私も含まれます)。

それより早くエンコードしたい場合は、二重エンコードを回避するための対策を講じてください。Joelは、ハンガリアン記法の適切な使用法についての記事を書きました。そこでは、変数に格納されるものを決定するために接頭辞を使用することを提唱しました。例:安全でない文字列の場合は「us」、安全な文字列の場合は「ss」。

usFirstName = getUserInput('firstName')

ssFirstName = cleanString(usFirstName);

また、情報の種類(都市、郵便番号など)は関係ありません。これらのいずれかをオフのままにしておくと、問題が発生します。

于 2008-11-14T02:39:25.853 に答える
2

それはあなたの状況によって異なります。私が働いている会社では何年もの間、HTML エンコーディングを行っていませんでした。そのため、それを開始したとき、ユーザー入力をページに表示できるシステム内のすべての場所を見つけることはほとんど不可能でした。

代わりに、入力ポイントが出力ポイントよりも少ないため、システムに入力する途中でサニタイズすることを選択しました。DB にデータを入力する直前にサニタイズします。Microsoft の AntiXss ライブラリは使用しませんが、入力の種類に応じて HTML タグと文字の範囲をホワイトリストに登録する一連の自作メソッドを使用します。

システムを最初から設計している場合、または出力をエンコードするのに十分小さい (または適切に管理された) システムを使用している場合は、Corey の提案に従ってください。それは間違いなくそれを行うためのより良い方法です。

于 2008-11-14T03:01:26.667 に答える
1

エンコーディングはデータのプロパティではなく、トランスポート メカニズムのプロパティです。したがって、受信時にデータのエンコードを解除し、送信前に適切にエンコードする必要があります。転送メカニズムによって、必要なエンコードの種類が決まります。

この原則は、トランスポート メカニズムが HTML、HTTP、煙信号などであるかどうかに関係なく当てはまります。秘訣は、エンコーディングの種類を手動で行う方法と、さまざまなフレームワークが自動的にステップを実行するタイミングを知ることです。たとえば、ASP.NET は System.Web.UI.WebControls.Button の Text に割り当てられたデータをエンコードしますが、System.Web.UI.WebControls.Literal の Text に割り当てられたテキストはエンコードしません。jQuery は、.innerText() で設定したコンテンツをエンコードしますが、.innerHtml() で設定したコンテンツはエンコードしません。

于 2009-11-24T00:34:06.960 に答える