Код (PHP): if(isset($_GET['get'])) { if((string)$_GET['get']==='str') { //code } else if((int)$_GET['get']===1) { //code } }
Код (Text): if ( $_GET['get'] === "1" ) $get =1; if ( $_GET['get'] === "2" ) $get =2; .......... if ( $_GET['get'] === "9999" ) $get =9999; )))
В моем случае это не прокатит. Все равно узнает какой тип: Код (PHP): //?get=1x if(site::get('get')) { } //true if(site::get('get',0)) { } //false Немного по другому пошел.
Между прочим, типа в $_GET может быть всего 2: string и array. Вопрос в том, согласны ли вы изменить символьное представление значения переменной при приведении к int, или нет. Добавлено спустя 49 секунд: Таким образом, от приведения вы все равно никуда не денетесь.
Помоему вы уже говорите ниочём, сорри! Очень хорошая статья в тему на хабре: Защита от SQL-инъекций в PHP и MySQL. Недостаток — длинная как «Война и Мир». Зато развенчивает многие мифы и разъясняет, в частности, как именно работают плейсхолдеры. Вывод: «проблема, как это часто бывает, оказывается не в инструменте, а в руках, которые его держат»
Так бывает ВСЕГДА и все это знают. Просто почему-то никто об этом не вспоминает до тех пор пока в лужу не сядет...
Это типа пишут код Код (Text): forech ($arr as $f=>$v) { $query .= "$f = '$v'"; и ожидают, что в $f буду поля name и password, а юзер добвит туда group и сделает себя админом.
Там в начале статьи тезис: безопасность = плейсхолдеры + белый_список_полей. Это всё про то же, можно брать только те имена, которые мы заранее где-то определили.
А имена полей-то тоже в кавычках идут. Без кавычек бессмысленно рассматриать эскейп-функцию. И то это не спасает. А вот интвал спасает
Соблюдайте все проверки и приведения типов, чтобы уже на "Верочку" было =) Потому, что php динамичный, а не строгий.