SQL-инъекция PHP: нужно ли проверять ввод пользователя с помощью параметризованных запросов? - PullRequest
1 голос
/ 27 февраля 2012

Например, у меня есть этот вход:

Имя : Wally

Электронная почта : wallycat@example.com '; DROP TABLE ClientTable; ПЕЧАТЬ 'Слишком плохо!' -

Мой параметризованный запрос:

$name = $_REQUEST['name'];

$email = $_REQUEST['email'];

$sql = "INSERT INTO ClientTable (Name, Email)

        VALUES ('$name', '$email')";

Даже если я использую этот параметризованный запрос, нужно ли мне проверять вводимые пользователем данные? (в данном случае поле электронной почты)

Или уже безопасен, так как я использую параметризованный запрос, и запрос просто сохранит все это: 'wallycat@example.com'; DROP TABLE ClientTable; ПЕЧАТЬ 'Too bad!' - 'в базе данных?

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

вы можете использовать

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");
1 голос
/ 27 февраля 2012

Вы должны сделать что-то вроде этого:

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email));
0 голосов
/ 27 февраля 2012

Параметризованные запросы позаботятся о экранировании.Вы все еще, вероятно, хотите проверить данные, хотя.Например, вы, вероятно, хотите убедиться, что это электронное письмо имеет, по крайней мере, что-то вроде user@domain, что телефонный номер состоит только из цифр и т. Д. Это больше касается целостности данных, чем безопасности, хотя есть некоторые совпадения.* Однако вы не используете параметризованный запрос в вашем примере, вы просто используете подстановку переменных.Параметризованный запрос подразумевает подготовленный оператор.

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