Почему мы должны избегать двойных кавычек, одинарные кавычки, создавая запросы в PHP
Почему мы должны избегать двойных кавычек, одинарные кавычки, создавая запросы в 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
всегда оценивается как истина, и вам придется дать хорошее объяснение своим злым пользователям.
Смотрите также: Лучший способ предотвратить SQL-инъекцию в PHP
Если вы не избежите кавычек, запрос заканчивается на месте одинарных кавычек. Так что ваш запрос не будет успешно выполнен!
Например
$qry = "SELECT * FROM user WHERE email='test@test.com'";
Он работает нормально, но если кто-то входит в email='test'@test.com', тогда запрос заканчивается только на' test 'и не находит строк с этим.
Так что это предотвращает также инъекцию sql!
s, чтобы предотвратить атаки SQL-инъекций. Знать SQL-инъекцию http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php http://www.homeandlearn.co.uk/php/php13p5.html
Для предотвращения внедрения PHP Sql /questions/18621243/kak-ya-mogu-predotvratit-vnedrenie-sql-v-php/18621248#18621248