[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как правильно фильтровать GET & POST?
Страницы: 1, 2
grisha2013
Как правильно фильтровать входящие данные?

Например, передаю ?id=5 или ?do=logout

На сервере принимаю
$_GET['id'];
$_GET['logout'];

Как их правильно проверить на сервере чтобы отсеять всякий вредоносный код и(или) инъекцию?
grisha2013
И как сделать проверку на путое значение переменной, например, если ввели ?id= без параметра?

Сейчас сделал проверку так:
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}

Правильно ли?
Нужно ли проверять существование переменных в $_GET и $_POST или сейчас с этим нет проблем на хостингах?

Если проблем с глобальными массивами на хостингах нет, то наверное достаточно будет вот так принять данные с проверкой?
$id = intval($_GET['id']);
$logout = strip_tags($_GET['logout']);
Rand
grisha2013
Проверять нужно всегда, т.к. пользователь этот параметр может не передать или передать некорректный параметр (id, например, в основном не может быть нулем и отрицательным). На счет SQL injection - всё зависит от того, что ты используешь для запросов в базу. Без использования подготовленных выражений обязательно целочисленные параметры приводить так:
$id = (int) $_GET['id'];
а строковые так:
$login = mysqli_real_escape_string($_GET['login']);
grisha2013
Цитата (Rand @ 27.07.2013 - 16:58)
$id = (int) $_GET['id'];

(int) перед $_GET это упрощенное написание intval() ?
grisha2013
Так для целочисленных правильно будет?

if(isset($_GET['id']))
{
$id = (int) $_GET['if'];
if($id == 0) exit("Ошибка: неправильный URL");
}


Цитата (Rand @ 27.07.2013 - 16:58)
На счет SQL injection - всё зависит от того, что ты используешь для запросов в базу.

Запросы к базе делаю так:
mysql_query("SELECT * FROM `data` WHERE `id`='$id'", $db)
T1grOK
Да. Нормально.
Но это от SQL иньекций эффективно, а еще есть ведь XSS(если говорить о строках), там что по возможности вырезайте html теги тотально strip_tags, выборочно - регулярные выражения и другие функции по работе со строками или преобразовывайте в мнемоники - htmlspecialchars.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Valick
Цитата
(int) перед $_GET это упрощенное написание intval() ?

это две разные функции, которые в принципе делают одно и то же


_____________
Стимулятор ~yoomoney - 41001303250491
waldicom
Цитата (Valick @ 27.07.2013 - 19:32)
это две разные функции, которые в принципе делают одно и то же

Если (int) функция, то вы балерун... Читайте умные книги...

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
grisha2013
Начал "курить" мануал :D
http://www.php.su/learnphp/datatypes/?mn#integer

Значит для строк можно сделать так:

if(isset($_GET['str']))
{
$str = (string) strip_tags($_GET['str']);
if($str == "") exit("Ошибка: неправильный URL");
}
Valick
waldicom, поумничал эрудит африканский? Теперь можешь спать спокойно, пусть тебе приснюсь я у станка...
С ума сойти я приведение к типу функцией обозвал, срочно посжигаю все свои тупые книжки, побегу в магазин за умными...

_____________
Стимулятор ~yoomoney - 41001303250491
waldicom
Цитата (Valick @ 27.07.2013 - 20:55)
... срочно посжигаю все свои тупые книжки, побегу в магазин за умными.

Отличная идея. Если не хватит денех, обращайся... Всем миром наскребем ущербному на знания.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Valick
waldicom, себе наскреби на тизин


_____________
Стимулятор ~yoomoney - 41001303250491
waldicom
Цитата (Valick @ 27.07.2013 - 21:40)
себе наскреби на тизин

Фигасе! Слухай, у тебя познания в лекарствах лучше, чем в программировании... Всю жисть на лекарства работаешь?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Valick
ты просто убиваешь меня своим интеллектом***
*поднял лапки к верху, заполз в свою норку, сижу дрожу боюсь страшного дядьки валдайкома*

_____________
Стимулятор ~yoomoney - 41001303250491
Rand
Цитата (grisha2013 @ 28.07.2013 - 01:36)
Значит для строк можно сделать так:

Нет смысла приводить к строковому типу, т.к. параметры и так всегда строковые и в некоторых случаях массивы. Даже если бы это было не так, преобразование произошло бы неявно и strip_tags в любом случае вернуло бы строку
if(isset($_GET['str']))
{
$str = mysql_real_escape_string(strip_tags($_GET['str']));
if($str == "") exit("Ошибка: неправильный URL");
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.