[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация POST
Трон
Привет всем, хочу уточнить правила фильтрации данных, поступающих через POST. Опишу как это сделал я.

1. Всегда на старте запускается:

static function CheckHost()
{
if (count($_POST) == 0) return;

$hostOwn = 'http://';
$hostOwn.= $_SERVER['HTTP_HOST'];
$hostFrom=getenv('HTTP_REFERER');

if ($hostFrom && !empty($hostFrom) && !ereg($hostOwn, $hostFrom))
{
throw new Exception("Попытка взлома. Исходный адрес: $hostOwn. Адрес запроса: $hostFrom");
}
}



2. Для POST-переменных, которые идут в запрос типа SELECT * from User WHERE Login=$login; вызывается фильтр:

static function SecureQuerryValue($value)
{
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
if (!is_numeric($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}


3. Для прочих, например, вставляемого в гостевуху текста, фильтр:

static function SecureText($text)
{
$text = stripslashes($text);
$text = htmlspecialchars($text);
$text = nl2br($text);
return $text;
}


Все правильно?

Что-то до конца не укладывается в голове что когда нужно и как фильтровать.



Спустя 4 минуты, 35 секунд (8.05.2011 - 16:58) Joker написал(а):
Ну во первых автоматов фильтровать данные ты не когда не сможешь.
Хотя вру сможешь но только на очень банальные правила, и то те будут тормозить систему.

Во вторых любой заголовок начинающийся с HTTP_ посылается браузером и подменяется за 2 секунды.

Единственное что действительно нужно делать это инициализация переменных в посте которые используются.

Спустя 2 часа, 1 минута, 21 секунда (8.05.2011 - 18:59) Белый Тигр написал(а):
            $value = stripslashes($value);

После этого почему нет вызова mysql_real_escape_string()?

Спустя 1 час, 8 минут, 35 секунд (8.05.2011 - 20:08) Трон написал(а):
Цитата (Белый Тигр @ 8.05.2011 - 15:59)
            $value = stripslashes($value);
После этого почему нет вызова mysql_real_escape_string()?


Он есть для не-цифровых значений в след. условии.

Спустя 1 час, 42 минуты, 55 секунд (8.05.2011 - 21:51) Guest написал(а):
Цитата (Joker @ 8.05.2011 - 13:58)

Единственное что действительно нужно делать это инициализация переменных в посте которые используются.

Если я правильно понимаю, речь о том, что хацкер может подсунуть через GET глобальную переменную. Против этого не поможет ли это?


foreach($_REQUEST as $key => $val) {
if(isset($$key)) unset($$key);
};

Спустя 34 минуты (8.05.2011 - 22:25) Joker написал(а):
Нет ты не правильно понел)

Часть прогеров делают так


if ($_POST['field'] = 'blabla')
{
//тут что то
}


Не думая что в массиве $_POST поля field вообще может и не быть, если его нету то это нотис

лучше так


///где внутри движка....
if (!isset($_POST['field']))
{
$_POST['field'] = '';
}


///уже в рабочем скрипте
if ($_POST['field'] = 'blabla')
{
//тут что то
}

учти пример очень образный)

Спустя 2 минуты, 24 секунды (8.05.2011 - 22:27) inpost написал(а):
Трон
ereg - устранел, надо использовать библиотеку preg.
Быстрый ответ:

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