- PR -

ASP.NETにおけるXSS、SQLインジェクション対策

投稿者投稿内容
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-08 22:35
引用:

Jittaさんの書き込み (2006-02-08 21:59) より:
 SQL injection に関しては、Web アプリケーションだから、という問題ではありません。Windows アプリケーションでも発生します。


そうですね。Webの場合は誰でも使えてしまうのが問題なのですね。Windowsアプリなら使う人も限定されるし、あえてテキストボックスにSQL文を書く人なんて居ないでしょうから。

何かと参考になりました。

ありがとうございました。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-02-08 22:35
要するに、既存のソフトウェアに一切手を加える事無く、一定の効果のあるSQLインジェクション対策やXSS対策を行いたいということですか?

ASP.NETに限らず広く使える対策方法に、リバースプロキシやファイアウォールを使う方法もあります。プロキシーサーバーで全ての入力値のサニタイジングや、危険性の判断を行い、通信を遮断するわけです。もちろんチェックルールをしっかり検討しないと、攻撃を許してしまったり、あるいは正常な動作を阻害したり、パフォーマンスを大幅に低下させる可能性があります。その辺りを考慮の上で導入を検討してみると良いでしょう。

例えばこんなのっ[F-Secure Site Guard]

ただしセキュリティを意識して、WEBアプリケーションの再設計やコードレベルでの修正を行うのが王道ですよ。本来この手の製品は、コーディングレベルでの漏れやミスによる脆弱性を予防的に塞ぐための物で、セキュリティを考慮せずに作った欠陥だらけの代物を誤魔化すための物ではないと思いますし。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-08 22:39
引用:

甕星さんの書き込み (2006-02-08 22:35) より:

ASP.NETに限らず広く使える対策方法に、リバースプロキシやファイアウォールを使う方法もあります。プロキシーサーバーで全ての入力値のサニタイジングや、危険性の判断を行い、通信を遮断するわけです。もちろんチェックルールをしっかり検討しないと、攻撃を許してしまったり、あるいは正常な動作を阻害したり、パフォーマンスを大幅に低下させる可能性があります。その辺りを考慮の上で導入を検討してみると良いでしょう。



参考にさせていただきます。

引用:

ただしセキュリティを意識して、WEBアプリケーションの再設計やコードレベルでの修正を行うのが王道ですよ。本来この手の製品は、コーディングレベルでの漏れやミスによる脆弱性を予防的に塞ぐための物で、セキュリティを考慮せずに作った欠陥だらけの代物を誤魔化すための物ではないと思いますし。



おっしゃる通りです。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-02-09 01:29
NAL-6295です。

こんばんは。
一言だけ、
パラメタライズドクエリにしても下記の事に注意しなくてはいけません。
・like演算子を利用する時は、結局エスケープ処理をした上で、あいまいにしたいところに%や?を挿入する必要がある。じゃないと、入力値に%や?があった場合、その部分もあいまいになってしまう。

また、
・DataTable.Selectメソッドや、DataView.RowFilterはパラメタライズドには出来ないので、エスケープ処理が必要。
です。
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 10:11
引用:

NAL-6295さんの書き込み (2006-02-09 01:29) より:
パラメタライズドクエリにしても下記の事に注意しなくてはいけません。
・like演算子を利用する時は、結局エスケープ処理をした上で、あいまいにしたいところに%や?を挿入する必要がある。じゃないと、入力値に%や?があった場合、その部分もあいまいになってしまう。
また、
・DataTable.Selectメソッドや、DataView.RowFilterはパラメタライズドには出来ないので、エスケープ処理が必要。
です。


結局エスケープしないといけないのなら、パラメタライズドにしないで、エスケープすれば良い話なのだろうか?但しエスケープする文字は運用上使用禁止にする必要もあるが。
で、エスケープする文字は['][?][%][;]ぐらいで良いのでしょうか?
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2006-02-09 10:16
引用:

NAL-6295さんの書き込み (2006-02-09 01:29) より:
・DataTable.Selectメソッドや、DataView.RowFilterはパラメタライズドには出来ないので、エスケープ処理が必要。



パラメタライズドの知識があまり無く、実装しようと考えてましたが。データアダプタを使用した場合、パラメタライズドには出来ないと言う事なのでしょうか?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-02-09 10:20
引用:

お獅子さんの書き込み (2006-02-09 10:11) より:
引用:

NAL-6295さんの書き込み (2006-02-09 01:29) より:
パラメタライズドクエリにしても下記の事に注意しなくてはいけません。
・like演算子を利用する時は、結局エスケープ処理をした上で、あいまいにしたいところに%や?を挿入する必要がある。じゃないと、入力値に%や?があった場合、その部分もあいまいになってしまう。
また、
・DataTable.Selectメソッドや、DataView.RowFilterはパラメタライズドには出来ないので、エスケープ処理が必要。
です。


結局エスケープしないといけないのなら、パラメタライズドにしないで、エスケープすれば良い話なのだろうか?但しエスケープする文字は運用上使用禁止にする必要もあるが。
で、エスケープする文字は['][?][%][;]ぐらいで良いのでしょうか?




違います。
パラメタライズドクエリにした上で、
その部分については対処するという事になると思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-02-09 10:22
引用:

お獅子さんの書き込み (2006-02-09 10:16) より:
引用:

NAL-6295さんの書き込み (2006-02-09 01:29) より:
・DataTable.Selectメソッドや、DataView.RowFilterはパラメタライズドには出来ないので、エスケープ処理が必要。



パラメタライズドの知識があまり無く、実装しようと考えてましたが。データアダプタを使用した場合、パラメタライズドには出来ないと言う事なのでしょうか?



違います。
それぞれのメソッドをMSDNで参照してみてください。
既にDBから取得して
DataTable上に存在しているデータに対しての処理です。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/

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