PHP での SQL インジェクション対策はどのように行いますか?
PHP と MySQL を利用しています。
以下のようにユーザー入力値など外部からの文字列を使用して SQL クエリーを生成する場合、SQL インジェクションの危険性があります。
$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', 'username', 'password');
$email = $_POST['email'];
$password = $_POST['password'];
// ユーザー入力値を利用して SQL 文を生成
$sql = "SELECT * FROM users WHERE email = '$email' AND password = '$password'";
$sth = $dbh->query($sql);
$userInfo = $sth->fetch(PDO::FETCH_ASSOC);
// ...
上記のようなコードは SQL インジェクションが行えてしまします。
例えば email
に ' OR 1=1 --
が入力されると、以下の SQL が発行されて期待しない結果(例の場合、他人としてログインできる)になってしまいます。
SELECT * FROM users WHERE email = '' OR 1=1 -- ' AND password = ''
このような SQL インジェクション対策はどのように行うべきでしょうか?