@blog.justoneplanet.info

日々勉強

PDOで気をつけねばならない事

■事例1

$sql="SELECT * FROM `test` LIMIT ?,?";
$stmt = $dbh->prepare($sql);
$stmt->execute(array($a, $b));

上述のように、LIMIT節にプリペアードステートメント(Prepared Statement)で値を代入しようとすると、数値がシングルクォーテーションで括られてしまい、エラーが発生してしまう。

■対策

LIMIT節にはプレイスホルダーを使わないようにする。これはPDOのバージョンによって発生したりしなかったりするので注意が必要。

■LIMIT節

基本的に数値を指定する事になると思うので、(int)を使って整数型へ変換し、数値の範囲でフィルタリングすれば、LIMIT節にプリペアードステートメントを使わなくても、SQLインジェクションは防げるはずである。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment