Избегайте замены MySQL Injection заменой одинарных и двойных кавычек - PullRequest
1 голос
/ 23 марта 2012

для очистки пользовательского ввода мы обычно используем mysql_real_escape_string, но, например, если я хочу сбежать: O'Brian он вернет O \ 'Brian, и мне это не очень нравится, потому что если я хочу напечатать это имя, у меня есть раздеть слэшес каждый раз. Вот я и подумал использовать эту функцию:

$search = array("'", '"');
$replace = array("´", "“");
$str_clean = str_replace($search, $replace, "O'Brian");

Эта простая функция защищает меня от MySQL-инъекции? Большое спасибо и извините за мой плохой английский.

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Нет - больше не нужно убегать!

Используйте mysqli или PDO и подготовленные заявления

http://php.net/manual/en/mysqli.prepare.php

http://php.net/manual/en/pdo.prepared-statements.php

2 голосов
/ 23 марта 2012

Вы всегда должны использовать mysql_real_escape_string, чтобы избежать ввода.Это для случаев, когда вы записываете значения в вашу базу данных, а не когда вы читаете значения из вашей базы данных.Когда вы пишете «O \ 'Brian» в вашу базу данных, она сохраняется как «O'Brian», а когда вы читаете ее обратно, вы также должны получить «O'Brian» (и не нужно удалять косые черты,так как они не существуют).

2 голосов
/ 23 марта 2012

mysql_real_escape_string добавляет \ только для экранирования строк и не добавляет их в базу данных, поэтому вам не нужно использовать полоски при отображении содержимого.вы действительно получаете \, хранящийся в базе данных, выполните off magic_quote

1 голос
/ 23 марта 2012

Да, очевидно, он защищает от SQL Injection атак

Экранирует специальные символы в unescaped_string, учитывая текущий набор символов соединения, так что его можно безопасно поместить в mysql_query().

...