Пишу свою cms. Данные будут поступать как от не зарегистрированных пользователей (login, password, email, комментарии к статьям, номера телефонов), так и от модераторов через админ панель (html код статей после CKEditor). html прогоняю через HTMLPurifier.
Так-же данные поступают через jsonRPC запросы, которые легко подделать или, например, прислать массив вместо числа.
Потом доверяю этим данным и работаю с ними в своих классах, без каких-либо проверок, вывожу в html-шаблонах.
Насколько правильно реализовал проверку данных? Может, код гуру пишут более красиво и лаконично?
Занесение в БД реализует другой класс, со своей отдельной фильтрацией.
public static function valid_int($val, $min=DEFAULT_INT_MIN, $max=DEFAULT_INT_MAX){
if(is_array($val)) return false;
$val=intval($val);
if($val<$min OR $val>$max) return false;
return $val;
}
public static function valid_string($val, $min=self::DEFAULT_STRING_MIN, $max=self::DEFAULT_STRING_MAX){
if(is_array($val)) return false;
$val=trim(htmlspecialchars(strip_tags($val), ENT_QUOTES));
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
return $val;
}
public static function valid_html($val, $min=self::DEFAULT_HTML_MIN, $max=self::DEFAULT_HTML_MAX){
if(is_array($val)) return false;
$val=trim(self::$html_purifier->purify($val));
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
return $val;
}
public static function valid_email($val, $min=self::DEFAULT_EMAIL_MIN, $max=self::DEFAULT_EMAIL_MAX){
if(is_array($val)) return false;
$val=trim($val);
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
$p=strpos($val, '@');
if($p===false) return false;
return $val;
}
public static function valid_phone($val, $min=self::DEFAULT_PHONE_MIN, $max=self::DEFAULT_PHONE_MAX){
if(is_array($val)) return false;
$val=trim(htmlspecialchars(strip_tags($val), ENT_QUOTES));
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
return $val;
}
public static function valid_login($val, $min=self::DEFAULT_LOGIN_MIN, $max=self::DEFAULT_LOGIN_MAX){
if(is_array($val)) return false;
$val=trim(htmlspecialchars(strip_tags($val), ENT_QUOTES));
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
if (!preg_match("/^[a-z0-9][a-z0-9-_]+[a-z0-9]$/is", $s)) return false;
return $val;
}
public static function valid_password($val, $min=self::DEFAULT_PASSWORD_MIN, $max=self::DEFAULT_PASSWORD_MAX){
if(is_array($val)) return false;
$val=trim($val);
if(mb_strlen($val, 'utf-8')<$min OR mb_strlen($val, 'utf-8')>$max) return false;
return $val;
}