« postgres メモ | メイン | PEAR::Mail »

SQL Injection(SQLインジェクション:SQLの挿入) 2回目

前回に引き続き、SQLインジェクション。メモ。

こんな、方法もある。

こちらを参考にした。

脆弱性の有無の確認。
---------------------------------------------------------
脆弱性の有無

(1) SJISを使ったクライアントでPHPのaddslashesを使った場合(あるいはmagic_quote_gpcがonの場合)に脆弱性がある。ほかの言語でも同様のことを行っていれば脆弱性がある。

 なお,8.1.4 et. al. Security Release FAQによれば,PEAR DBを使っている場合にも脆弱性の可能性があるようである。

(2) フロントエンドとバックエンドのエンコーディングが異なっている場合に脆弱性がある。

(3) prepared statementを使用していれば脆弱性の可能性はない。ただし,prepared statementのようなインタフェースでありながら,実際には内部でSQL文を合成するなど,本物のプロトコルレベルのprepared statementを使っていないケースもありそうなので注意が必要である。

逆に言えば,(1)と(2)に該当しない,あるいは(3)に該当すれば脆弱性はないことになる。
---------------------------------------------------------

検証していこう。
(1) ・・・文字コードはutf-8を使用しているし、magic_quotes_gpc はoffでかつ、pg_escape_stringを利用しているのでOK.
(2) ・・・ソースもDBもutf-8を使用しているのでOK.
(3) ・・・利用していないが、(1)と(2)がOKなので、OK.


結論から言うと、PHP,Postgresql で開発している場合は

------------------------------------------------
(1) PostgreSQL 8.1.4,8.0.8,7.4.13,7.3.15のいずれかにアップデートする。

(2) シングルクォートをバックスラッシュでエスケープしている場合は,シングルクォートを重ねるエスケープ方法に変更する。PHPで言えば, magic_quote_gpcをoffにし,かつaddslashes()ではなくpg_escape_string()を使うようにする。

(3) (2)が難しい場合には十分注意しながらbackslash_quoteを設定する
------------------------------------------------

検証する。

(1) ・・・ 今回利用しているバージョンは、7.3.15なのでOK.
(2) ・・・ magic_quote_gpcをoffにし,かつaddslashes()ではなくpg_escape_string() を利用している。
(3) ・・・ (2)が可能なのでOK.



トラックバック

このエントリーのトラックバックURL:
http://synth.jp/pg/mt-tb.cgi/62

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダー


2007年06月
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Map

About

2006年12月05日 14:56に投稿されたエントリーのページです。

ひとつ前の投稿は「postgres メモ」です。

次の投稿は「PEAR::Mail」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。