PHP / preg_match / гарантирует защиту от SQL инъекций?

345
09 апреля 2017, 04:31

Безопасен ли данный код с точки зрения SQL инъекции, в интернете не смог найти однозначного ответа, один пишут что да, другие нет. Хотелось бы услышать ваши комментарии по поводу уязвимости (если она есть напишите где именно слабое место), пожалуйста не пишите про использование PDO, интересует именно то, допускает ли такое регулярное выражения SQL инъекцию, спасибо.

$login = $_POST['login'];
if (!preg_match('/^[A-z0-9]{5,10}$/', $login)) {
    exit('login invalid');
}
mysqli_query($data_base, "SELECT `name` FROM `users` WHERE `login` = '$login'");
Answer 1

Приведенный Вами код АБСОЛЮТНО безопасен от SQL иньекций по причине того, что SQL отсутствует.

Если приведете коды SQL - уточню ответ

Если Вы имеете в виду комментированный код - то ДА, после фильтра на регулярку SQL иньекция невозможна

Ну Вы меня троллите... Изменили вопрос и ответ - не в струю...

Answer 2

Увы, это типичная ситуация для этого сайта, когда на вопрос одного дурака кидаются отвечать два других, и в итоге получается чудовищная галиматья.

Разумеется, на регулярки в защите от инъекций полагаться нельзя.

Сам вопрос - это детский лепет, "Маааааам, можно я руки не буду мыть, я же на улице не быыыыл!". Сама идея торговаться на предмет "нужно ли мыть руки" - это уже красный сигнал, обсуждать тут в принципе нечего.

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

Данный вопрос следует удалить, как неверно сформулированный и имеющий потенциально опасные последствия.

Answer 3

Функция mysqli_real_escape_string экранирует символы: NUL (ASCII 0), \n, \r, \, ', ", и Control-Z. Только эти символы и никакие другие могут вам навредить, в том числе являясь частью SQL-инъекции. Если ваша регулярка эти символы не пропускает, значит их нет, экранировать нечего, и SQL-инъекция в принципе невозможна.

UPDATE: При условии если строка без спецсимволов не выходит за пределы кавычек!

Источник: http://php.net/manual/ru/mysqli.real-escape-string.php

READ ALSO
syntax error on line 26

syntax error on line 26

Белая страница с такой вот ошибкой:

203
Как и где создавать команды для бота php-telegram-bot

Как и где создавать команды для бота php-telegram-bot

Пользуюсь данным помощником https://githubcom/akalongman/php-telegram-bot#credits, подскажите где настроить приветственное сообщение и как добавлять новые команды?

231
Объединить json

Объединить json

Доброго вечераПодскажите пожалуйста по json

311
Open source биллинг

Open source биллинг

Здравствуйте!

295