grisha2013
27.07.2013 - 16:32
Как правильно фильтровать входящие данные?
Например, передаю ?id=5 или ?do=logout
На сервере принимаю
$_GET['id'];
$_GET['logout'];
Как их правильно проверить на сервере чтобы отсеять всякий вредоносный код и(или) инъекцию?
grisha2013
27.07.2013 - 17:02
И как сделать проверку на путое значение переменной, например, если ввели ?id= без параметра?
Сейчас сделал проверку так:
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}
Правильно ли?
Нужно ли проверять существование переменных в $_GET и $_POST или сейчас с этим нет проблем на хостингах?
Если проблем с глобальными массивами на хостингах нет, то наверное достаточно будет вот так принять данные с проверкой?
$id = intval($_GET['id']);
$logout = strip_tags($_GET['logout']);
grisha2013Проверять нужно всегда, т.к. пользователь этот параметр может не передать или передать некорректный параметр (id, например, в основном не может быть нулем и отрицательным). На счет SQL injection - всё зависит от того, что ты используешь для запросов в базу. Без использования подготовленных выражений обязательно целочисленные параметры приводить так:
$id = (int) $_GET['id'];
а строковые так:
$login = mysqli_real_escape_string($_GET['login']);
grisha2013
27.07.2013 - 19:56
Цитата (Rand @ 27.07.2013 - 16:58) |
$id = (int) $_GET['id']; |
(int) перед $_GET это упрощенное написание intval() ?
grisha2013
27.07.2013 - 20:16
Так для целочисленных правильно будет?
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
27.07.2013 - 20:31
Да. Нормально.
Но это от 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
27.07.2013 - 22:32
Цитата |
(int) перед $_GET это упрощенное написание intval() ? |
это две разные функции, которые в принципе делают одно и то же
_____________
Стимулятор ~yoomoney - 41001303250491
waldicom
27.07.2013 - 22:47
Цитата (Valick @ 27.07.2013 - 19:32) |
это две разные функции, которые в принципе делают одно и то же |
Если (int) функция, то вы балерун... Читайте умные книги...
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
grisha2013
27.07.2013 - 23:36
Начал "курить" мануал :D
http://www.php.su/learnphp/datatypes/?mn#integerЗначит для строк можно сделать так:
if(isset($_GET['str']))
{
$str = (string) strip_tags($_GET['str']);
if($str == "") exit("Ошибка: неправильный URL");
}
Valick
27.07.2013 - 23:55
waldicom, поумничал эрудит африканский? Теперь можешь спать спокойно, пусть тебе приснюсь я у станка...
С ума сойти я приведение к типу функцией обозвал, срочно посжигаю все свои тупые книжки, побегу в магазин за умными...
_____________
Стимулятор ~yoomoney - 41001303250491
waldicom
28.07.2013 - 00:21
Цитата (Valick @ 27.07.2013 - 20:55) |
... срочно посжигаю все свои тупые книжки, побегу в магазин за умными. |
Отличная идея. Если не хватит денех, обращайся... Всем миром наскребем ущербному на знания.
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
waldicom
28.07.2013 - 00:43
Цитата (Valick @ 27.07.2013 - 21:40) |
себе наскреби на тизин |
Фигасе! Слухай, у тебя познания в лекарствах лучше, чем в программировании... Всю жисть на лекарства работаешь?
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Valick
28.07.2013 - 00:55
ты просто убиваешь меня своим интеллектом***
*поднял лапки к верху, заполз в свою норку, сижу дрожу боюсь страшного дядьки валдайкома*
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата (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");
}