MySQLi подготовить по соображениям безопасности? - PullRequest
1 голос
/ 03 сентября 2011

Итак, я начал использовать расширение MySQLi, так как слышал, что оно будет поддерживаемым в будущем.Я читал об этом вместо использования mysql_real_escape_string(). Я должен использовать prepare() по соображениям безопасности, например, когда я использую $ _GET или $ _POST в своем запросе.

Это правда?Я вижу, что prepare () хорош для создания шаблонов запросов SQL, где я могу изменять параметры.Таким образом, сценарий также может быть динамическим на уровне SQL.Это действительно полезно.Но я не могу найти реальную информацию о его мерах безопасности.Неужели это действительно помогает избежать зла и защищает от уколов?Или мне приходится иметь дело с этим на уровне программирования?

Например, этот код безопасен?Как вы можете видеть, используйте $_GET для заполнения шаблона, так что это может быть очень опасно, если подготовка MySQLi не работает так, как я хочу.

$stmt = $mysqli->prepare('SELECT description,title FROM menu WHERE name = ?');

$stmt->bind_param('s', $n);

$n = $_GET['b'];

$stmt->bind_result($meta_description,$meta_title);
$stmt->execute(); 

1 Ответ

3 голосов
/ 03 сентября 2011

Подготовленные параметры невосприимчивы к внедрению, поскольку они предлагаются серверу после синтаксического анализа SQL, то есть они никак не могут быть интерпретированы как фрагменты SQL, что является основой атаки SQL-инъекцией.

В вашемНапример, все, что находится в переменной $_GET['b'], будет использоваться сервером для сравнения с полем базы данных name, но существует абсолютно НЕТ ПУТИ , когда сервер может быть обманут в интерпретации этого текста как логического уравнения,конец оператора, за которым следует, скажем, удаление, ...

Таким образом, по своей конструкции он не предлагает SQL-инъекцию поверхности атаки, и поэтому использование подготовленных операторов намного превосходит все виды экранирования и вводаСхемы очистки.

...