|
|
|
| Вот всё что-то я сомневаюсь, в скрипт поступают данные двумя методами (get and request) и обе переменные полученные скриптом должны быть целыми положительными числами и никак иначе, от 1 до бесконечности...
Но почему то я дурю что ли.... нужно ли фильтровать переменную перед такой операцией?
$page = preg_replace('/[^0-9]+/', '',$_REQUEST['page']);
$mode = preg_replace('/[^0-9]+/', '',$_GET['mode']);
Вот и гадаю прям, можно ли снять фильтрацию перед этими действиями или нет? Как мне говорили - php в себя через такую команду пропустит только числа, которые ничего не сделают, но я читал где то взлом сайта с аналогичным фильтром чисел.
ДА и вообще не очень понял если отдельная функция в php для выделения целых ПОЛОЖИТЕЛЬНЫХ чисел.
Подскажите плиз! | |
|
|
|
|
|
|
|
для: Proger
(24.06.2007 в 13:35)
| | intval | |
|
|
|
|
|
|
|
для: bronenos
(24.06.2007 в 13:57)
| | А мне кто-нибудь пояснит нужно фильтровать перед intval или нет? То есть тупо $num = intval($_GET['num']); ??!?!?!?!?! | |
|
|
|
|
|
|
|
для: Proger
(24.06.2007 в 14:01)
| | Результат intval --- это целое число (может, быть отрицательное). Причём у пользователя есть возможность задать совершенно произвольное число. Чтобы оно было обязательно неотрицательным, используйте abs(intval(...)), чтобы обязательно положительным abs(intval(...))==0?1:abs(intval(...)) | |
|
|
|
|
|
|
|
для: Osipov
(24.06.2007 в 14:16)
| | Чтобы оно было обязательно неотрицательным, используйте abs(intval(...))
Можно просто abs() | |
|
|
|
|
|
|
|
для: Unkind
(24.06.2007 в 14:21)
| | Нельзя, потому, что abs(-1.2) --- это float, а нужно целое | |
|
|
|
|
|
|
|
для: Proger
(24.06.2007 в 14:01)
| | а зачем? Если начало строки будет целым числом - функция возьмет значение.
Она, правда, пропустит отрицательные величины тоже, но с другой стороны - это обычно не создает проблем бОльших, чем числа, выходящие за фактический диапазон.
Вы пишете, что аргумент от единицы до бесконечности.
Я склонен предположить, что это не так.
Самый вероятный случай - передается первичный (autoincrement) ключ какой-либо таблицы.
Во 1-х, наверняка - не до бесконечности, так ведь? Допустим, последняя созданная запись получила ключ 227375 - как в этом посте. Это значит, что значения выше этого числа смысл имеют не больший, чем значение -1 или 0.
Во 2-х, в таблице могут быть дыры - удаленные записи. И такие номера тоже смысла не несут.
Так что грубого фильтра intval хватает - инъекции исключены.
Можно даже протаскивать специальные значения для большей гибкости.
А тонкий фильтр - по области допустимых значений - функцией общего вида не обеспечишь. | |
|
|
|
|
|
|
|
для: Trianon
(24.06.2007 в 14:25)
| | Спасибо за ответы! ;)
P.S. никакой таблицы то нет, а MySQL я всё никак не могу изучить ;) Это просто вызов файлов которые пронумерованы на скачку, и если файла нету, то юзера ошибку я пишу так что взлом по идее исключён ;) | |
|
|
|