- PR -

サニタイジングの実装に対して

1
投稿者投稿内容
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2004-06-27 18:41
StrutsとEJBを使用するシステムを実装中です。インテグレーション層としてはEnittyBeanとHibernateを併用しています。ここで、クロスサイトスクリプティングやSQLインジェクションなどの脆弱性を防ぐためにサニタイジングを行いたいと思いますが、実装した方はいないでしょうか?
今考えているのはJakarta-oroなどの正規表現が使えるライブラリーを利用してサブレットのフィルタとして実装する事ですがよりいいアイデアとかはございませんか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-06-28 11:27
unibon です。こんにちわ。

以下、あまり強い考えと言うわけではなく、こんな感想を持ちました、という程度です。

引用:

suminさんの書き込み (2004-06-27 18:41) より:
StrutsとEJBを使用するシステムを実装中です。インテグレーション層としてはEnittyBeanとHibernateを併用しています。ここで、クロスサイトスクリプティングやSQLインジェクションなどの脆弱性を防ぐためにサニタイジングを行いたいと思いますが、実装した方はいないでしょうか?


サニタイジングという言葉はあまり良く知りませんが、フィルターとして備えるのは、ポートを塞ぐのと似たような感じであり、とりあえずの予防に過ぎず、厳密性に欠けるような気もします。というのも、動作するタイミングがわりと早いため、あまりガチガチに制限することができず、荒い網目で捕まえるような感じになってしまうように思います。

引用:

suminさんの書き込み (2004-06-27 18:41) より:
今考えているのはJakarta-oroなどの正規表現が使えるライブラリーを利用してサブレットのフィルタとして実装する事ですがよりいいアイデアとかはございませんか?


正規表現はたしかに厳密性はあるものの、人が見て分かりづらく、デバッグがしづらいかもしれません。if 文の羅列でロジックをチェックするようにしたほうが良いかもと思います。ただ、正規表現が分かりやすい・分かりにくい、は主観もありますが。
ちなみに、ご存知かもしれませんが、正規表現としては Java2(1.4以降)に標準で付属する java.util.regex パッケージもあります。
sumin
ベテラン
会議室デビュー日: 2003/07/17
投稿数: 93
投稿日時: 2004-06-28 11:40
ご意見ありありがとうございます。

引用:

サニタイジングという言葉はあまり良く知りませんが、フィルターとして備えるのは、ポートを塞ぐのと似たような感じであり、とりあえずの予防に過ぎず、厳密性に欠けるような気もします。というのも、動作するタイミングがわりと早いため、あまりガチガチに制限することができず、荒い網目で捕まえるような感じになってしまうように思います。



確かにフィルタリングと同じ概念で考えています。フィルタリングの実施場所は
 ・サブレットのフィルタ:クロスサイトスクリプティング防止用
 ・EntityBeanやHibernateと言ったインテグレーション層の入り口(SQLインジェクション防止用)
と言う2ヶ所で考えています。

引用:

正規表現はたしかに厳密性はあるものの、人が見て分かりづらく、デバッグがしづらいかもしれません。if 文の羅列でロジックをチェックするようにしたほうが良いかもと思います。ただ、正規表現が分かりやすい・分かりにくい、は主観もありますが。
ちなみに、ご存知かもしれませんが、正規表現としては Java2(1.4以降)に標準で付属する java.util.regex パッケージもあります。



今、使用中の環境はWASの制限でJDK1.3をベースにしています。if文を使う事もありだとは思いますが、フィルタリングの対象になる文字、文字列などをユーザが動的に設定出来るようにしたいと思っています。まあ、どっちがわかり易いかは確かに議論の余地はありますが。。。

koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-06-28 12:57
Strutsの場合、Strutsのタグライブラリstruts-beanのbean:writeタグを使うと、
&や<>といった文字を自動的に&amp;や$lt;&gt;に変換してくれます。
この機能はデフォルトで有効で、これをオフにする場合は
明示的にbean:writeタグの属性filterにfalseを指定する必要があります。
ですので、Strutsを使う場合は特に意識する必要はないかと思います。

EJBは詳しくないので、他の方にお任せします(;^ ^)。
1

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