ОБСУЖДЕНИЕ

Для тех кто фильтрует числа через if*

20 сообщений1 просмотровЗакрыта
#1
Долгое время я сам делал вот такую фильтрацию чисел на PHP.



****

Ход работы:
Если значение в переменной $value более 0 - то скрипт выполняется - если число не проходит - выводит ошибку:


****

А сейчас попробуем вставить в переменную $value значение "10 Привет".

Результат работы:

Как видим - скрипт пропустил данное значение.

****

А сейчас немного теории:

Не будем говорить то что например благодаря такой фильтрации можно пропустить XSS уязвимость, SQL уязвимость.

Столкнулся я с таким:
При вставке значения в базу данных [Поле `money` => тип: Числовое].
Вставляем значение 10.9889.1 [Т. е. две точки]. Я был в шоке если честно то что запрос прошел без ошибок. А в двойном шоке когда увидел что база данных вставило число: "109889" вместо например "10.9889". Думаю сами додумаетесь во что это может выйти...


P. S.:
Если не очень понятно - спрашивайте. И прошу заметить, это не тема "Помогите исправить", а информация для тех кто ТАК фильтрует. И уважаемых пользователей-засиральщиков попросил бы покинуть тему.
#2
1) первый скрин - а если переменная будет равна нолю? Ноль это ноль, он не больше, ни меньше.

2) "Вставляем значение 10.9889.1 [Т. е. две точки]. Я был в шоке"
почитай про типы данных, это одно из самого первого что ты знать должен! ТЫЖ программист)))
Собственно линки для тех кто проявит желание к изучениям:
Типы данных PHP
MySql - числовые типы данных
#3
Отсутствие строгой типизации одно из главних плюсов и одновременно минусов в PHP..
#4
Обезопась себя и сайт - он даже рекламу купил на эту тему..о боже..
#5
И еще смотрим приведение к типам)))
$value = '10 Привет';
CODE

if ((int)$value > 0) {
}

#6
if ($value >= 0)
[Если] {Переменная value} \Больше или равна\ нулю (0)

2. Ну простите я сам учился (Собираюсь в Россию ехать учится на программиста). Всего знать невозможно.
#7
все зависит от уровня того кто это php использует
#8
А ты не заметил что тема - не помощь - как исправить (Как исправить я знаю) - а именно на заметку. Первую строку прочти.
#9
тогда нужно 100000000..... тем создавать на эту тему)) хотя это основы основ)))
#10
Вот и давай создай "100000000", может меньше УГ кодеров станет.
#11
bage, У кого-то нехило пригорает от чьего-либо успеха)0
#12
И не говори... Во всех моих темах хренью мается...
#13
ик как ты себе это представляешь???
весь форум забит темами
Пасаны представьте echo $_GET['hello'] - уязвимость!!!!

мы конечно рады что ты учишь php
но не нужно каждый раз создавать темы типа выше приведенного примера)))
#14
бредо тема)
#15
багет)0
#16
intval-ом еще можно для разнообразия))
#17
"if ($value >= 0) [Если] {Переменная value}" та знаю что оно означает..

Коль такие проверки делаеш:
PHP
$v = '10 хз что';

// что бы не было не поняток
// если предполагается целое число
$v = (int)$v; // это все что НЕ ЦЕЛОЕ число уберет
// Для других типов см. например тут пример http://it-log.info/text-119.html

if(!$v)
{
echo'v = 0, или не существует';
} 
else if($v > 10)
{
echo'v больше 10';
}
else
{
echo'v меньше 10';
}


или

BASH
if($v and $v > 10)
{
echo'больше 10';
} 


Это по твоему примеру так
А так вот, почитай, че может и полезное найдеш http://it-log.info/text-119.html
#18
"Для тех кто фильтрует числа через if"
не надо через IF ELSE 100500 проверок!!
Достаточно например (для простого числа)
if(!(int)$a) echo'переменная $a не число!!!';
#19
Ты бы первую строку прочитал в первом посте. Может бы понял.
#20
Тему закрыл IvanDanilov!
Причина: Не хочу нецензурную лексику применфять. Но уже достали люди которые мне дают советы как фильтровать.

АЛЁ! Тема была по поводу того что НЕЛЬЗЯ "ФИЛЬТРАВАТЬ ЧЕРЕЗ IF/ELSE"! Так понятнее? Или у вас одноядерный процессор не может обработать такое кол-во процессов?