phpの学習に使っている手元にある本にmysql_real_escape_stringという関数が使用されていました。
しかしこの関数が意味するところを調べてみると、もう非推奨となっていました。
そこでPDO::quoteに出会い、今回はそれを勉強してみました。
(名著なのですが2008年のものなので仕方ないみたいです・・・)

SQLインジェクション

セキュリティの不備を利用して、不正なSQL文を実行させることによって、データベースシステムを不正に操作する攻撃手法のことをSQLインジェクションと言います。
このSQLインジェクションに対策を打つべく外部から文字列を入力してデータベースを操作する場合にはサニタイジング処理を行わなければいけません。

サニタイジング処理

これはエスケープ処理とも言われ、特殊文字をエスケープしてくれます。

PDO::quote

PDO::quote()ではエスケープ処理をしてくれます。
以下のコードでは、もうすでにデータベースにアクセスしているものとします。

コード

<?php
//データベースにアクセスして選択する

$user = '****';
$pass = '*****';

try {
   $dbh = new PDO('mysql:host=localhost;dbname=*****', $user, $pass);

if($dbh){
	echo "データベースへの接続に成功しました。";
}else{
	echo "データベースへの接続に失敗しました。";
}
} catch (PDOException $e) {

   print "エラー!: " . $e->getMessage() . "<br/>";
    die();
}
?>
<?php//エスケープ処理
$string = 'Nice';
print "Unquoted string: $string\n";
print "Quoted string: " . $dbh->quote($string) . "\n";
?> 

実行

Unquoted string: Nice
Quoted string: 'Nice'

となります。
このようにシングルクオートがエスケープされます。

最終更新:2015年11月23日 20:16