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 секунды.
Единственное что действительно нужно делать это инициализация переменных в посте которые используются.
Хотя вру сможешь но только на очень банальные правила, и то те будут тормозить систему.
Во вторых любой заголовок начинающийся с 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 написал(а):
Нет ты не правильно понел)
Часть прогеров делают так
Не думая что в массиве $_POST поля field вообще может и не быть, если его нету то это нотис
лучше так
учти пример очень образный)
Часть прогеров делают так
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.
ereg - устранел, надо использовать библиотеку preg.