Будут ли подготовленные заявления полностью защищать мой сайт от инъекции MySQL? - PullRequest
3 голосов
/ 19 сентября 2010

Я использую подготовленные операторы и MySQLi в своих запросах для защиты от атак внедрения.Будут ли подготовленные операторы полностью устранять необходимость в mysql_real_escape_string?Есть ли что-то еще, что я должен учитывать при защите своего сайта?

Ответы [ 2 ]

5 голосов
/ 19 сентября 2010

Пока вы правильно используете подготовленные утверждения, они будут. Вы должны убедиться, что вы связываете все внешние переменные, а не помещаете их непосредственно в запрос.

Например

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=" . $name);

Это утверждение готовится, но оно не использует один из методов связывания, поэтому оно не приносит пользы. Это все еще уязвимо для внедрения SQL.

Чтобы исправить это, убедитесь, что связали все ...

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
1 голос
/ 19 сентября 2010

Я использую подготовленные операторы и MySQLi в своих запросах для защиты от атак с использованием инъекций.

Не делайте этого. Не используйте готовые заявления для защиты от чего-либо. Это не то, для чего подготовлены заявления. Это просто, чтобы сделать ваши запросы синтаксически правильными. И, как побочный эффект, синтаксически правильный запрос также неуязвим для любой атаки.
Итак, просто используйте его, чтобы поместить данные в запрос.

Будут ли подготовленные операторы полностью устранять необходимость в mysql_real_escape_string?

Это неправильно со стороны mysql_real_escape_string. эта функция не защищает вас от чего-либо. Если вы просто примените эту функцию к своим данным, это не сделает ее «безопасной». эта функция работает только для строк в кавычках.
Хотя да, использование подготовленных операторов делает эту функцию устаревшей, а также другие простые правила сборки SQL. Это на самом деле делает работу, которую вы думаете mysql_real_escape_string делать. Это действительно делает любые данные безопасными (для SQL).

Есть ли что-то еще, что я должен учитывать при защите своего сайта?

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

...