ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  292  : 記事  5  : コメント  634  : トラックバック  78

ニュース

あわせて読みたい

記事カテゴリ

書庫

日記カテゴリ

Communities

ちょいと前からですが、断続的に大規模な SQL injection 攻撃が続いています。

よくある対策としては、stored procedure 利用しろ!とか、parameterized query 利用しろ!とか ad-hoc query 利用する場合は sanitizing しろ!とか。望ましい順番は stored procedure > parameterized query > ad-hoc query with sanitizing になるわけですが、stored procedure 以上により望ましい方法があります。

SQL injection って何が問題なんでしょう?

そう、本来は許可されるべきでない user が不正に data へ access できてしまうことが問題なんです。あれ?これってもろに access control の話ですよね? 大抵の DBMS には当然 DBMS の access control 機能があります。そう、これを厳密に適用している状態であれば、SQL injection されたところで data に access する段階で確実にはじかれます。また、application 側で対策するよりも遥かに容易に制限を課すことができるのも利点ですね。

でも、一般に DBMS の access control 機能ってそれほど利用されていないじゃないの?と思われる方も多いと思います。これはなぜでしょう?

一つ目の要因として、DB に access する user を分けると resource 消費が増えるというのがあります。利用する DBMS によって異なりますが、connection pooling ができなくなるとか多くの場合 performance 面で不利になる点は否めないでしょう。これが一番の要因になっているようですね。

二つ目は user 管理の問題です。DB に access する user を分けるわけですから、DB もしくは DB で利用する認証 server に user account を作成する必要があります。これを嫌っている人も多いみたいですね。でも、これ自動化するのはそんなに難しくないと思うんだけどなぁ。独自の認証利用している場合が多いと思いますが、その強度・管理面まで考えると正直逆転するんじゃないかと思います。

まあ、そういうこともあって現状では DBMS の access control を利用していることが多いとは言えませんが、より確実な access control 以外にも DB への接続 user を分ける利点があります。

それは、traceability の確保です。DB へ接続する user を共有している場合、当然ですが DB 側ではどの user が行った操作なのかわかりません。これでは監査できているとは言えませんよね。ちゃんとした監査を要求される system では、どの user (個人) が行った操作か? というのが識別できないといけません。User を共有した場合、これを application 側で DB に書き込む処理を追加しなければなりません。これは正直負担が大きいです。では user を分離した場合ではどうなるでしょう? DBMS 側の機能で要求される監査を実施できることが多いです。いちいちゴリゴリ coding する必要がないので楽になりますね。

まあ、どの方法を選択するかは perfomance, security は当然として、開発費用、運用管理費用等まで考慮する必要があります。DB というととかく perfomance のみに目が行きがちですが、他の要因も検討対象に加え再評価してはいかがでしょうか。

投稿日時 : 2008年5月11日 1:01

コメント

# DB への接続 user を共用した場合の client-server 構成での 問題点 2008/05/11 4:41 ちゃっぴの監禁部屋
DB への接続 user を共用した場合の client-server 構成での 問題点

# re: DB への接続 user を共用した場合の client-server 構成での 問題点 2008/05/11 9:31 ちゃっぴの監禁部屋
re: DB への接続 user を共用した場合の client-server 構成での 問題点

# re: SQL injection を防ぐもうひとつの方法 2008/05/11 14:00 Hirotow
たしか、正規のルートから非正規のクエリを流してスクリプトを誤動作させることだったと思いますが。
最近はもっと直接的なのも出てきてるのか。

# re: SQL injection を防ぐもうひとつの方法 2008/05/11 20:21 ちゃっぴ
> たしか、正規のルートから非正規のクエリを流してスクリプトを誤動作させることだったと思いますが。

これ何を指していますか? 3月中旬に発生した Web page の改ざんでしょうか?
Web page の改ざんは改ざんされていた部分が本来書き込めてはいけないのに SQL injection を通じて書き込める状態になっていたのが問題です。

もともとだれでも書き込めるところに悪意のある script を挿入するのは SQL injection ではなく、script injection (XSS) の問題でしょう。

> 最近はもっと直接的なのも出てきてるのか。

以前は DB の情報を抜く目的であるものが 99% を占めていたそうです。

あの「SQLインジェクション」騒動の裏で(前編)
http://www.atmarkit.co.jp/fsecurity/column/kawaguchi/001.html

# DB への接続 user を共用する場合でも少しでも脅威を軽減できるように設計しよう 2008/05/11 21:03 ちゃっぴの監禁部屋
DB への接続 user を共用する場合でも少しでも脅威を軽減できるように設計しよう

# CGIPHPץȸϿ 2008/05/16 14:22 scriptEYE
??CGIPHP??????96Υ???????????μ»??????? ?????????

Post Feedback

タイトル
名前
Url:
コメント