Фильтрация данных, важный ньюанс 
Автор: Evgeny Sergeev
Программы ничего не придумывают и выполняют именно то, что написано в их коде. Но чтобы понять, что написано, порой, необходимо приглядеться и увидеть некоторые ньюансы. Приведу пример часто встречающегося фильтра, на основе preg_match:
$clean = array();
if (preg_match(”/^[0-9]+:[X-Z]+$/”, $_GET['var'])) {
$clean['var'] = $_GET['var'];
}
if (preg_match(”/^[0-9]+:[X-Z]+$/”, $_GET['var'])) {
$clean['var'] = $_GET['var'];
}
выглядит просто и понятно. Но в данном коде допущена существенная ошибка!
Проблема в символе “$”, который обозначает в данном случае конец строки, а не текста! При поступлении “многострочных” данных, скрипт анализирует первую строку, и если она соответствует шаблону признает валидными весь текст.
Вот как выглядит код, лишенный этого недостатка:
$clean = array();
if (preg_match(”/^[0-9]+:[X-Z]+$/D”, $_GET['var'])) {
$clean['var'] = $_GET['var'];
}
if (preg_match(”/^[0-9]+:[X-Z]+$/D”, $_GET['var'])) {
$clean['var'] = $_GET['var'];
}
подписаться на блог
dkrnl
Гость
дык днях нашли дырку в Filter PHP5.2, связана с модификатором D. (: совпадение?
sal
Гость
Конечно
Leave a Reply