Expl0ited, спасибо, очень подробно и доступно описано! Но у меня вопрос, отдельно is_numeric() как-то обойти возможно? Если использовать хекс? Тоесть как минимум нужно написать unhex(), а это уже не число.
Мм, а не подскажете, как нащет стринговых запросов? Как защищаются от инъекций в них, и как проводят?
Всё это можно найти здесь: http://forum.antichat.ru/thread43966.html В большинстве случаев достаточно фильтровать кавычки.
Ни в коем случае ненадо ничего фильтровать Нужно грамотно работать с типами данных. (int) intval() is_numeric() для числовых mysql_real_escape_string() для строковых Всё. PS Только не нужно мне показывать intval в условиях и кривые реализации в коде. Я всё это знаю. Если один раз прочитать мануалы к 3-м функциям и делать правильно, скулей не будет )
KolosJey Expl0ited именно эти функции имел ввиду, так как вопрос был следующим "а не подскажете, как нащет стринговых запросов?"
Konqi "Фильтрация кавычек" подразумевает именно фильтрацию. Возможно я что то не так понял, но для меня совершенно однозначно понятие "фильтрация" не вяжется с функцией mysql_real_escape_string. Она ничего не фильтрует. И если я так понял пост Expl0ited'а, то думаю кто то запросто мог его понять так-же.
KolosJey в случий стринговых запросов (входящие данные типа стринг), думаю ни один разумный кодер не будет фильтрировать запрос через регулярку или вхождение в строке, понятно же что самый оптимальный и правильный вариант это экранирование ковычек
Те же грабли только в профиль. В моем посте имелось ввиду, обработать входящие данные, в соответствии их типу различными функциями. Самый надежный способ: PHP: <?php ... # string $query = sprintf("SELECT * FROM table WHERE text='%s' LIMIT 1", mysql_real_escape_string($_GET['text'])); ... # integer $query = sprintf("SELECT * FROM table WHERE id='%s' LIMIT 1", (int)$_GET['id']); ... ?> И вообще, мы далеко ушли от темы, автор темы получил желаемый ответ. За сим тему закрываю.