Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фильтрация чисел
 
 автор: Proger   (24.06.2007 в 13:35)   письмо автору
 
 

Вот всё что-то я сомневаюсь, в скрипт поступают данные двумя методами (get and request) и обе переменные полученные скриптом должны быть целыми положительными числами и никак иначе, от 1 до бесконечности...
Но почему то я дурю что ли.... нужно ли фильтровать переменную перед такой операцией?

$page = preg_replace('/[^0-9]+/', '',$_REQUEST['page']);
$mode = preg_replace('/[^0-9]+/', '',$_GET['mode']);

Вот и гадаю прям, можно ли снять фильтрацию перед этими действиями или нет? Как мне говорили - php в себя через такую команду пропустит только числа, которые ничего не сделают, но я читал где то взлом сайта с аналогичным фильтром чисел.

ДА и вообще не очень понял если отдельная функция в php для выделения целых ПОЛОЖИТЕЛЬНЫХ чисел.

Подскажите плиз!

   
 
 автор: bronenos   (24.06.2007 в 13:57)   письмо автору
 
   для: Proger   (24.06.2007 в 13:35)
 

intval

   
 
 автор: Proger   (24.06.2007 в 14:01)   письмо автору
 
   для: bronenos   (24.06.2007 в 13:57)
 

А мне кто-нибудь пояснит нужно фильтровать перед intval или нет? То есть тупо $num = intval($_GET['num']); ??!?!?!?!?!

   
 
 автор: Osipov   (24.06.2007 в 14:16)   письмо автору
 
   для: Proger   (24.06.2007 в 14:01)
 

Результат intval --- это целое число (может, быть отрицательное). Причём у пользователя есть возможность задать совершенно произвольное число. Чтобы оно было обязательно неотрицательным, используйте abs(intval(...)), чтобы обязательно положительным abs(intval(...))==0?1:abs(intval(...))

   
 
 автор: Unkind   (24.06.2007 в 14:21)   письмо автору
 
   для: Osipov   (24.06.2007 в 14:16)
 

Чтобы оно было обязательно неотрицательным, используйте abs(intval(...))
Можно просто abs()

   
 
 автор: Osipov   (24.06.2007 в 14:31)   письмо автору
 
   для: Unkind   (24.06.2007 в 14:21)
 

Нельзя, потому, что abs(-1.2) --- это float, а нужно целое

   
 
 автор: Trianon   (24.06.2007 в 14:25)   письмо автору
 
   для: Proger   (24.06.2007 в 14:01)
 

а зачем? Если начало строки будет целым числом - функция возьмет значение.

Она, правда, пропустит отрицательные величины тоже, но с другой стороны - это обычно не создает проблем бОльших, чем числа, выходящие за фактический диапазон.

Вы пишете, что аргумент от единицы до бесконечности.
Я склонен предположить, что это не так.
Самый вероятный случай - передается первичный (autoincrement) ключ какой-либо таблицы.
Во 1-х, наверняка - не до бесконечности, так ведь? Допустим, последняя созданная запись получила ключ 227375 - как в этом посте. Это значит, что значения выше этого числа смысл имеют не больший, чем значение -1 или 0.
Во 2-х, в таблице могут быть дыры - удаленные записи. И такие номера тоже смысла не несут.

Так что грубого фильтра intval хватает - инъекции исключены.
Можно даже протаскивать специальные значения для большей гибкости.
А тонкий фильтр - по области допустимых значений - функцией общего вида не обеспечишь.

   
 
 автор: Proger   (24.06.2007 в 14:47)   письмо автору
 
   для: Trianon   (24.06.2007 в 14:25)
 

Спасибо за ответы! ;)

P.S. никакой таблицы то нет, а MySQL я всё никак не могу изучить ;) Это просто вызов файлов которые пронумерованы на скачку, и если файла нету, то юзера ошибку я пишу так что взлом по идее исключён ;)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования