сам ты матерное слово... Читай всю тему, а не выдёргивай слова из контента. Пример я привёл, mysql_escape_string не панацея, инъекция прошла. А то что в кавычки нужно всё ставить - это уже вопрос третий. Я лично не ставлю кавычки, а просто прогоняю через intval() И тем более mysql_escape_string не всегда применима
не привёл. случай, когда в запрос вставляются данные без кавычек или без риалэскепа давайте не рассматривать.
это ещё почему, что это за дополнительные условия? Основная мысль - достаточно ли mysql_escape_string чтобы избавиться от инъекции. Ответ - нет. Нужна ещё голова и знания как правильно её применять Добавлено спустя 1 минуту 45 секунд: в общем в любом случае это уже морально устаревшая "защита" ))
Gold Dragon, ты о типизации? mysql_escape_string - deprecated. mysql_real_escape_string - предостережет, mysql_set_charset чтобы влиять на поведение. А вообще mysql_* уже - deprecated. В дальнейшем подвергнется удалению, вскорей всего.
Код (PHP): mysql_query("SELECT `login`,`password` FROM `user` WHERE `id`='".intval(preg_replace('/[^0-9]/','',$_POST['id']))."' LIMIT 0,1");
хватит и просто intval() причем делать это ДО запроса. и если результат равен нулю - то даже и запрос делать не нужно
Код (PHP): $a='a4543'; echo intval($a); // 0 $a='2a4543'; echo intval($a); // 2 $a='2a4543'; echo intval(preg_replace('/[^0-9]/','',$a)); //24543
Your, тут вопрос в другом. если я жду число а мне пришло какоето говно - то это явная ошибка или хакер начинающий чтото подбирает. какой смысл копаться в этом говне и выдавать абы какой результат нагружая БД бессмысленными запросами? все просто. если входные данные не соответсвуют тому что мы ожидаем - это исключительная ситуация. надо сообщать об этом юзеру и админу. и прекращать работу скрипта. точка!
Люто плюсую !!! Бесят всякие "джедайские техники" типа intval или того хуже strip_tags и прочие "шедевры"
хз. кто-то видит свою задачу в полном анальном огораживании. Я вижу задачу только не допустить несанкционированного изменения БД.
Давно ушёл, и не жалею. С этим просто справляется Ctype или (если нужны отрицательные значения) тупо is_numeric. Попробуй несанкционно измени... Код (Text): if ( ctype_digit($_GET['page']) ) { mysql_query('бла-бла-бла'.$_GET['page']); } А вообще мы это уже обсуждали, но каждый раз находится кто-то кто не понимает о чём я говорю, и убеждает меня что без приведения типов делать неправильно... А вообще в наше время пора бы уже начать забывать о MySQL и смотреть ТОЛЬКО в сторону MySQLi и PDO
Обычно, в web это совершенно не нужно. В какой нибудь системной библиотеке где надо работать с битами возможно что-то подобное и было бы нужно (привести к int и проверять биты) но такие вещи не пишутся на РНР А суслика видишь ? Два равносильных, на первый взгляд кода Код (Text): $page = isset($_GET['page']) && ctype_digit($_GET['page']) ? $_GET['page'] : 0; Код (Text): $page = isset($_GET['page']) ? intval($_GET['page']) : 0; А теперь смотрим разницу, и смотрим логику скрипта (что мы ждём и что получаем) разница становится очевидна. Добавлено спустя 10 минут 27 секунд: Вообще по ходу топик превращается в проход по второму кругу этого топика viewtopic.php?f=18&t=41075 (включая основные действующие лица)