- PR -

validaterequest=false 時のXSS対策について

1
投稿者投稿内容
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-11-06 22:51
こんばんは。

ユーザからの入力値に全ての文字を許可したい場合は
(例えばユーザ登録情報の自己紹介など)
validaterequest=false を指定して要求の検証を無効にします。
この時、XSS等の対策として出力時のHtmlEncodeを行う必要がありますが、
登録情報を表示する全てのコントロールに対してServer.HtmlEncodeを
かますという対応が一般的なのでしょうか?

この場合、登録情報を表示する画面の作成者は、データ内にスクリプト等
が埋め込まれている可能性があるかをその都度確認し、Server.HtmlEncode
を行う必要について判断しなければなりませんので、結果としてセキュリティ
ホールを生み出し易い構成になってしまいます。
各コントロールにHtmlEncodeプロパティみたいな物が存在し、デフォルトtrue
で設定されていれば悩まずに済むのですが、そのようなプロパティは存在しな
いようです。

お勧めの対応方法がありましたらご教授ください。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-11-06 23:12
引用:

masaさんの書き込み (2005-11-06 22:51) より:
各コントロールにHtmlEncodeプロパティみたいな物が存在し、デフォルトtrue
で設定されていれば悩まずに済むのですが、そのようなプロパティは存在しな
いようです。


NAL-6295です。

私の場合ですが、
Labelを継承したカスタムコントロールを作成し、
Textプロパティをオーバライドし、
代入する時は、内部でHtmlEncodeが行われ、
参照する時は、内部でHtmlDecodeが行われるようにしてあります。

以上、参考になれば。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-11-07 03:01
こんばんは。
レスありがとうございます。

引用:

NAL-6295さんの書き込み (2005-11-06 23:12) より:
私の場合ですが、
Labelを継承したカスタムコントロールを作成し、
Textプロパティをオーバライドし、
代入する時は、内部でHtmlEncodeが行われ、
参照する時は、内部でHtmlDecodeが行われるようにしてあります。


やはりカスタムコントロールを使用する対応になるのですね。
validaterequestなんて物をデフォルトで有効にするぐらいならば、
デフォルトで用意されている各コントロールにHtmlEncodeをかけて
くれればいいのに、と思います。

入力値チェックはあくまでデータの整合性を保つためのものであっ
て、入力された文字列が危険であるかどうかの判断は、各レイヤが
責任を持って行うのが本来の姿。SQL文で使用する入力値に危険な
文字が含まれている場合は、パラメータクエリで、ViewにHTMLを使用
するならば、HTMLを表示する際にそれぞれ無害化すれば問題ない訳で、
役割分担も明確に出来ます。
なんだか.NETのセキュリティに対するアプローチはどこかずれちゃって
いるんではないかなぁ。と個人的には感じているのですが、
皆様はどのようにお考えでしょうか?

いろいろな見解を聞かせて頂ければ幸いです。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-11-07 05:49
ASP.NET 2.0のGridViewにDataViewをバインドしたらHTMLタグが含まれるデータが自動的にHTMLEncodeされてました。ASP.NET 2.0では、この辺改善されているのではないでしょうか。HTMLEncodeしてほしくないときは、テンプレート列にしてEval()/Bind()で表示させる必要があるようです。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-11-11 18:35
こんにちは。
引用:

Accessさんの書き込み (2005-11-07 05:49) より:
ASP.NET 2.0のGridViewにDataViewをバインドしたらHTMLタグが含まれるデータが自動的にHTMLEncodeされてました。ASP.NET 2.0では、この辺改善されているのではないでしょうか。HTMLEncodeしてほしくないときは、テンプレート列にしてEval()/Bind()で表示させる必要があるようです。


やっと環境が整ったので試してみたのですが、
Label1.Text = TextBox1.Text
を記述したところサニタイジングは行ってくれませんでした。
かなり期待していたのですが、ザンネンです。
1

スキルアップ/キャリアアップ(JOB@IT)