0

PHPでクエリを作成する際に、二重引用符や一重引用符をエスケープする必要があるのはなぜですか? それを行う際に特に利点はありますか?それとも単なる良い習慣ですか?

4

3 に答える 3

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 と評価されるため、怒っているユーザーに適切な説明を行う必要があります。

関連項目: PHP で SQL インジェクションを防ぐ最善の方法

于 2012-06-11T05:46:45.303 に答える
0

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

于 2012-06-11T05:56:09.527 に答える
0

引用符をエスケープしない場合、クエリは単一引用符の場所で終了します。したがって、クエリは正常に実行されません!

例えば

$qry = "SELECT * FROM user WHERE email='test@test.com'";

正常に動作しますが、誰かが email='test'@test.com' を入力すると、クエリは 'test' でのみ終了し、その行を含む行は見つかりません。

したがって、SQL インジェクションも防止できます。

于 2012-06-11T05:47:07.020 に答える