ipc_ngs: Проблема в том, что при использовании for_each у меня перебираются все итераторы, как же я передам итератор в функтор, если сам for_each уже предполагает передачу итератора , ведь они перебираются именно для того чтобы попасть в функтор.
Подготовил запрос через PDO::prepare , при вызове execute() передал массив, и вываливается ошибка эта. Самое интересное что я нашел место в переменных после которой вываливается ошибка и это ни моя вина, а что-то другое. У меня 18 переменных должны связаться в запросе.
Не пойму в чем проблема.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in и т.д.
AlikDex: Подготовленные выражения - это хранимые процедуры в SQL или я не так понял? С password_hash и password_verify возьму на заметку и даже поменяю в своем коде кусок кода с проверкой.
filter_var - пожалуй тоже начну пользоваться вместо регулярок.
AlikDex: Печаль, свой код и не могу поломать ёмаё. Да нет, просто хотел свой код поломать, чтобы понять где дыры оставил и обезопасить код после изучения.
AlikDex: А как быть если вывод информации не предполагался в коде, то есть получили через SELECT и сразу же проверка в if и никакого вывода самих данных не происходит.
AlikDex: Но, конечный результат после htmlspecialchars не меняет кавычки! И запрос получается таким:
string(164) "SELECT * FROM `СКРОЮ_название`.`staff` WHERE `login`="hack" or 1=1; INSERT INTO `staff`(`login`,`password`) VALUES ("hack","hack") ;-- """
SagePtr: Нет, как раз этого не происходит, потому что в конечном варианте запрос принимает вид строки:
string(164) "SELECT * FROM `СКРОЮ_название`.`staff` WHERE `login`="hack" or 1=1; INSERT INTO `staff`(`login`,`password`) VALUES ("hack","hack") ;-- """
AlikDex:
В форму вставил выражение:
hack" or 1=1; INSERT INTO `staff`(`login`,`password`) VALUES ("hack","hack") ;-- "
Результат такой, что я получил лишь выполнение первого запрос. в котором ошибка логина или пароля, а второй запрос INSERT INTO как будто и не выполнялся.
AlikDex: Так ни о каких статьях и не идет речь ) Речь идет конкретно об одном куске кода, где используется экранирование, но мне что-то не верится, что из-за экранирования не проходит инъекция. Я убрал экранирование и получил вполне хорошую дырку, а инъекция все также не выполняется, не пойму почему...