0

たとえば、挿入フォームを構成する多くのパラメータがあります。

x.Parameters.AddWithValue("@city", City.Text)

今朝、サイトでのxss攻撃に失敗したので、とにかくセキュリティ対策を強化しようとしています。

このように入力パラメータを追加する必要がありますか?

x.Parameters.AddWithValue("@city", HttpUtility.HtmlEncode(City.Text))

攻撃を避けるために他に考慮すべきことはありますか?

4

2 に答える 2

5

入力をエンコードしないでください。出力をエンコードします。将来のある時点で、同じデータを使用してPDFまたはWordドキュメント(または他の何か)を作成することを決定する可能性があります。その時点で、HTMLにする必要はありません。

あなたがデータを受け入れるとき、それはただのデータです。

データベースにデータを挿入するときは、データベースにとって意味のあるものに変換する必要があります。

HTMLドキュメントにデータを挿入するときは、HTMLで意味をなすようにデータを変換する必要があります。

… 等々。

于 2010-06-03T08:49:57.157 に答える
1

OWASPXSS防止に関するチートシートを確認することを強くお勧めします。これは、挿入できるhtmlドキュメントのさまざまな領域を分類するのに役立ち、出力を各場所に適切にエンコードする方法のレシピです。

htmlEncode()のような関数を普遍的に信頼して、すべての病気の魔法の薬になると期待することはできないことを知っておいてください。リンクされたOWASPドキュメントから引用するには:

HTMLエンティティだけで信頼できないデータをエンコードできないのはなぜですか?

HTMLエンティティエンコーディングは、タグ内など、HTMLドキュメントの本文に配置した信頼できないデータに対しては問題ありません。特に属性の前後に引用符を使用することに信心深い場合は、属性に含まれる信頼できないデータに対しても機能します。ただし、信頼できないデータをタグ内、またはonmouseoverなどのイベントハンドラー属性内、CSS内、またはURLに配置する場合、HTMLエンティティエンコーディングは機能しません。したがって、どこでもHTMLエンティティエンコーディングメソッドを使用している場合でも、XSSに対して脆弱である可能性があります。信頼できないデータを入れるHTMLドキュメントの部分にはエスケープ構文を使用する必要があります。それが以下のルールのすべてです。

XSSがどのように、そしてなぜ機能するのかを正確に理解するために時間をかけてください。次に、これらの7つのルールに従うだけで、安全になります。

于 2010-06-03T11:25:52.570 に答える