Search

2012/06/03

PHPでSQLのインジェクション対策の1個だけ守ること

PHPでSQLのDB操作なんてやったこと無い。
しかし、「インジェクション対策」なるものだけは聞いたことがある。
やらないと、DBを破壊されたりするからだ。
分かりそうなとこを調べてみた。

「ふっかつのじゅもんがちがいます。」withぬこさんの記事がすごく分かりやすかった。
http://d.hatena.ne.jp/ajiyoshi/20100409/1270809525
「単にプリペアドステートメントを使え」
よく分からないので、これだけを守ろう。
追加して「文字列結合でSQLを構築するな」も注意しよう。
こうしておけば、途中で「'」コーテーションや「#」などを入れられて、
不測のコードが実行されることは少なくなるのだろうと思う。

詳しくは、ockeghem(徳丸浩)の日記さんの下記の記事がまとまっている。
■「SQLインジェクション対策」でGoogle検索して上位15記事を検証した
http://d.hatena.ne.jp/ockeghem/20111109/p1


プリペアードの使い方はよく分からないが、下記のようなものらしい。
「?」の部分に変数がくるように割り当てるのだろうと思う。

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");

$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

$stmt->execute();



SQLite3のプリペアードについては、idocsq.netさんが詳しい。
http://idocsq.net/page/124

0 件のコメント:

コメントを投稿