Целесообразна ли такая фильтрация?
1.
Женек (03.06.2011 / 01:50)
Интересует вопрос, целесообразна ли вот такая фильтрация прилетающих данных?
<?
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; не спрашивать, так надо
интересует вообще такой подход к фильтрации массива $_POST = $valid->arr($_POST);
Что то кажется мне он очень очень очень кривым... Но с другой стороны... В общем мнения)
2.
ramzes (03.06.2011 / 02:00)
много раз уже подобное обсуждали.
плохо это, не православный метод.
во первых фильтрация должна соответствовать типу данных, во вторых фильтровать надо то что используешь, а не все подряд
3.
KOZZ (03.06.2011 / 07:06)
каждая переменная должна соответствовать тому,что от неё ожидается. Такая глобальная фильтрация это бред.
4.
Женек (03.06.2011 / 09:26)
это лишь часть класса, дальше отдельные фильтрации для чисел и текста и всего что мне бывает нужно фильтровать еденично, вторично, тоично, но бывает прилетают массивы со смесью, достаточно больше...
5.
KOZZ (03.06.2011 / 10:02)
ну так сделай пару функций для фильтрации, и применяй именно в нужных случаях, зачем это все так глобально делать?
я юзаю такие:
<?
# защита входных данных (для юзеров)
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;}
}
?>
6.
Владислав (01.07.2011 / 03:15)
5.
eGo ушел в реал, multibyte есть по стандарту во всех сборках PHP 5.
7.
Станислав (01.07.2011 / 04:26)
как-то тяжко всё. есть же "стандартные" методы фильтрации данных. Написал пару функций, отдельно для гет - отдельно для пост, и фильтруешь ими потом то, что доступно пользователю. делов-то =)
8.
ктулху (01.07.2011 / 04:54)
7, лучше писать функции для разного типа данных.
т.е. сделал функцию для проверки текста(с преобразованием переносов и без), цифр, мыл, урлов и т.д.
и юзай как хочешь... echo filter($str, 'text_br');
например. Все фильтры в одной функции, фильтруешь только то что нужно.
9.
ramzes (01.07.2011 / 05:11)
я всегда совмещаю функцию фильтрации строки с ее обрезкой
а числовую проверку с проверкой допустимого диапазона.
функции мыл и прочего не использую, они разовые в принципе, а код подгружается все время
URL:
https://visavi.net/topics/22069