Безопасное экранирование переменной в необработанном запросе SQL - PullRequest
1 голос
/ 25 августа 2010

Мне просто интересно, будет ли следующее абсолютно безопасным или кто-нибудь сможет обойти его, используя шестнадцатеричные символы и т. Д .:

$name = mysql_real_escape_string(htmlentities(stripslashes($_REQUEST['name'])));
$query ="SELECT * FROM Games WHERE name LIKE '%{$name}%'";

Спасибо.

Я знаю, что могу использовать PEAR и другие библиотеки, чтобы делать готовые заявления. Однако этот вопрос касается только необработанных запросов.

Ответы [ 5 ]

7 голосов
/ 25 августа 2010

mysql_real_escape_string делает трюк,.,

[ПРАВИТЬ]

для использования строки:

$str = mysql_real_escape_string($input);

для числовых значений приведение типадостаточно как:

$val = (int)$input;
3 голосов
/ 25 августа 2010

Используйте параметризованные подготовленные операторы вместе с PDO, это даст вам самый безопасный способ отправки запросов, который может предложить PHP, и вам не придется вообще иметь дело с экранированием, используя этот способ

2 голосов
/ 25 августа 2010

Для SQL просто

$name = mysql_real_escape_string($_REQUEST['name']);
$query ="SELECT * FROM Games WHERE name LIKE '%$name%'";

достаточно.

Более того, использование htmlentities и stripslashes здесь не нужно и глючит.
Я сомневаюсь, что вы хотите искать Dankeschön вместо Dankeschön, например.

Обратите внимание , что mysql_real_escape_string, очевидно, работает только для строк в кавычках.

$num = mysql_real_escape_string($_REQUEST['num']);
$query ="SELECT * FROM Games WHERE salary > $num;

будет не помочь

Для других целей могут быть другие проверки.

0 голосов
/ 25 августа 2010

Либо используйте параметризованный SQL, либо принудительную входную фильтрацию:

$query = "SELECT * FROM Games WHERE name LIKE '%{$_REQUEST->sql['name']}%'";

Ручное экранирование - довольно плохой стиль, потому что его слишком легко забыть.

0 голосов
/ 25 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...