Должны ли мы всегда использовать подготовленные операторы в MySQL и php или когда их использовать? - PullRequest
0 голосов
/ 25 июня 2018

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

Мой вопрос

Нужно ли всегда использовать подготовленные заявления? или есть какой-то сценарий, при котором нормального утверждения будет достаточно по сравнению с подготовленными утверждениями?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Только что узнал твой вопрос, и я вспомнил мои старые добрые времена.Мне тоже было трудно реализовать подготовленные операторы, потому что на первый взгляд кажется, что легко без них писать код.Затем в другой раз я создал систему входа в систему с использованием PHP, которой я гордился.Я чувствовал себя прекрасно, хотя делал это полностью с нуля.Но я сделал ошибку, не используя их, а затем проверил Google, как можно обойти систему входа в систему.Первый трюк вызвал у меня головную боль, так как теперь я мог войти на свою веб-страницу, не зная имени пользователя или пароля и просто используя некоторые символы, такие как '-' и бум, и я оказался на своей веб-странице.Так что я прошел весь путь назад и обеспечил его с помощью параметризованных запросов, и теперь это безопасно.Поскольку вы и я оба новички, эти вещи, безусловно, вызовут у нас головную боль.Кроме того, вы должны использовать их только тогда, когда вы принимаете что-то от ввода пользователя.Иначе ты готов идти.Просто посмотрите на другие уязвимости, такие как XSS и т. Д. Они тоже опасны.Удачи

0 голосов
/ 25 июня 2018

Неподготовленных операторов достаточно, если у вас есть SQL-запрос, который полностью жестко запрограммирован и не требует PHP-переменных в SQL.

Вот пример:

$result = $mysqli->query("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL 7 DAY");

Запрос является автономным.Это просто фиксированная строка, полностью контролируемая вашим приложением.Ни один ненадежный контент никак не может повлиять на запрос.

Если вашему запросу требуется переменная часть, используйте параметры запроса, например:

$stmt = $mysqli->prepare("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL ? DAY");
$stmt->bind_param("i", $number_of_days);
$stmt->execute();

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

...