Целесообразна ли такая фильтрация?

Print RSS
49

Author
Дедушка
0
Интересует вопрос, целесообразна ли вот такая фильтрация прилетающих данных?
<?
class valid
	{
		public function arr ($arr)
			{

				foreach ($arr as $value=>$key)
					{

						if ($arr[$value]=='')
							{

								$arr[$value]=-1;
							}

						$arr[$value] = trim(htmlspecialchars($arr[$value]));

		    			if (!empty($key) && $key!='-1' && !preg_match('|^[a-zа-яА-ЯA-Z0-9\-\.\,\s()\_]+$|i',$key)){die ('<b>Ошибка! Недопустимые символы </b>');}

					}
				return $arr;
			}
........................................
}

$_POST = $valid->arr($_POST);
?>

Про $arr[$value]=-1; не спрашивать, так надо D интересует вообще такой подход к фильтрации массива $_POST = $valid->arr($_POST);

Что то кажется мне он очень очень очень кривым... Но с другой стороны... В общем мнения)
Changed: Женек (03.06.2011 / 01:50)

2000 лет д.н.э.
0
много раз уже подобное обсуждали.
плохо это, не православный метод.
во первых фильтрация должна соответствовать типу данных, во вторых фильтровать надо то что используешь, а не все подряд
K

Транклюкаторщик
0
каждая переменная должна соответствовать тому,что от неё ожидается. Такая глобальная фильтрация это бред.
Author
Дедушка
0
это лишь часть класса, дальше отдельные фильтрации для чисел и текста и всего что мне бывает нужно фильтровать еденично, вторично, тоично, но бывает прилетают массивы со смесью, достаточно больше...
K

Транклюкаторщик
0
ну так сделай пару функций для фильтрации, и применяй именно в нужных случаях, зачем это все так глобально делать?
я юзаю такие:
<?
# защита входных данных (для юзеров)
function check_in($var){
return mysql_real_escape_string(trim(htmlentities($var, ENT_QUOTES, 'UTF-8')));
}

# защита входных данных (как правило, для админа, если нужны HTML теги)
function check_ad($var){
return mysql_real_escape_string(nl2br(trim($var)));
}

# преобразовывает число меньшее или равное нулю в 1 (например, для номера страниц, полезная штука)
function more_zero($var){
$var = (int) abs($var);
if($var<=0){return $var=1;} else {return $var;}
}

# strlen (если есть библиоткеа multibyte)
function x_strlen($str){
if (function_exists('mb_strlen')) {return mb_strlen($str, 'utf-8');} else {return strlen($str);}
}

# проверка длины строки (от $min символов до $max, удобно. PHP 5 ++)
function check_strlen($string,$min,$max){
$a =  filter_var(x_strlen($string), FILTER_VALIDATE_INT, array('options'=>array('min_range'=>$min,'max_range'=>$max)));
if($a !== false){return true;} else {return false;}
}

?>
В

Кодер
0
5. eGo ушел в реал, multibyte есть по стандарту во всех сборках PHP 5.

ВЕЛИКИЙ и УЖАСНЫЙ!
0
как-то тяжко всё. есть же "стандартные" методы фильтрации данных. Написал пару функций, отдельно для гет - отдельно для пост, и фильтруешь ими потом то, что доступно пользователю. делов-то =)

Ктулху
0
7, лучше писать функции для разного типа данных.
т.е. сделал функцию для проверки текста(с преобразованием переносов и без), цифр, мыл, урлов и т.д.
и юзай как хочешь... echo filter($str, 'text_br');
например. Все фильтры в одной функции, фильтруешь только то что нужно.

2000 лет д.н.э.
0
я всегда совмещаю функцию фильтрации строки с ее обрезкой
а числовую проверку с проверкой допустимого диапазона.
функции мыл и прочего не использую, они разовые в принципе, а код подгружается все время
Stickers / Tags / Rules / Top topics / Top Posts / Search