PHPでクエリを作成する際に、二重引用符や一重引用符をエスケープする必要があるのはなぜですか? それを行う際に特に利点はありますか?それとも単なる良い習慣ですか?
3 に答える
クエリを機能させ、安全にするために必要です。次のコードを検討してください。
$name = "O'reilly";
$sql = "INSERT INTO users (name) VALUES ('$name')";
結果の SQL は次のようになります。
INSERT INTO users (name) VALUES('O'reilly');
これは単に機能しません。適切にエスケープする必要があります。
INSERT INTO users (name) VALUES('O\'reilly');
同じことが他の特殊文字にも当てはまります。
SQL インジェクションを防ぐ
次のクエリを検討してください。
DELETE FROM users WHERE username='$username';
から$username
取得され$_POST
ます。攻撃者が次のような文字列を投稿できた場合、クエリ' OR 1; --
は次のよう$username
になります。
DELETE FROM users WHERE username='' OR 1; -- ';
これは有効であり、WHERE
常に true と評価されるため、怒っているユーザーに適切な説明を行う必要があります。
s、SQLインジェクション攻撃を防ぐため。SQLインジェクションを知るに はhttp://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.phphttp://www.homeandlearn.co.uk/php/php13p5.html
PHPSQLインジェクションを防ぐには https://stackoverflow.com/a/60496/781181
引用符をエスケープしない場合、クエリは単一引用符の場所で終了します。したがって、クエリは正常に実行されません!
例えば
$qry = "SELECT * FROM user WHERE email='test@test.com'";
正常に動作しますが、誰かが email='test'@test.com' を入力すると、クエリは 'test' でのみ終了し、その行を含む行は見つかりません。
したがって、SQL インジェクションも防止できます。