Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

書籍「はじめてのPHPプログラミング基本編5.3対応」にSQLインジェクション脆弱性

via. 書籍「はじめてのPHPプログラミング基本編5.3対応」にSQLインジェクション脆弱性 - 徳丸浩の日記(2008-10-29)

データベースのセキュリティについて徳丸浩氏に指摘頂きました。ありがとうございます。


問題の報告

それは、本書P280に登場する「SQLインジェクション対策用の関数(dbescape)」だ。
        :
そう、この関数にはバグがある。

こちらでも確認しましたが、第9章(p.280)で用意したSQLインジェクション対策用の関数(dbescape)にバグがあり、SQLインジェクション対策が不十分だと分かりました。


あるいは、SQLiteの使用をあきらめ、MySQLを使ってもよかった。本書のカバーには「MySQL(データベース)」とある(これはCD-ROMに MySQLが添付されているということらしい)。WindowsでもMySQLは動作するし、実務でも利用機会はMySQLの方がずっと多いだろう。 MySQLであれば、mysql_xxxx系の関数でバインド機構が利用できる。さらに大切なこととして、「SQLインジェクション対策は原則としてバインド機構を用いるべし」という原則を教えることもできるのだから。

この点は執筆時に残り紙面や「中級者への布石としてどこまで伝えるべきか」を含めさんざん悩んだ箇所ですが、第8章も含め「バインド機構を用いる」という点が強調できなかったこと、また、バインド機構がないSQLite(SQLite2)を選択したことは、結果的にミスだったと思います。

これらについては、別途正誤表と合わせてまとめておきます。


あと、下岡についてはすでに(2007年末)ウノウ株式会社を退職している点については指摘しておきます。