Фильтрация и валидация

  • Злоумышленник может использовать нестандартный набор символов, который будет пропущен функциями фильтрации.
  • Нулевые байты (\0) являются потенциальной уязвимостью.
  • Нужно преобразовывать наборы символов перед фильтрацией, используя нативные функции.
  • Никогда нельзя полагаться на client-side-javascript фильтрацию.
  • filter_input ( $type, $variable_name, $filter, $option ) Принимает переменную извне PHP и, при необходимости, фильтрует ее. type - один из INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER или INPUT_ENV. filter также может принимать разные значения в виде констант, например FILTER_VALIDATE_BOOLEAN, FILTER_VALIDATE_EMAIL, FILTER_VALIDATE_FLOAT, FILTER_VALIDATE_INT, FILTER_VALIDATE_IP, FILTER_VALIDATE_URL и другие.
  • Существует два основных типа фильтрации: проверка и очистка. Проверка используется для определения соответствия данных определённым критериям. Например, применение FILTER_VALIDATE_EMAIL позволяет проверить, являются ли введённые данные адресом email, однако, сами данные при этом останутся нетронутыми. Очистка используется для извлечения из данных нежелательных конструкций. Например, применение FILTER_SANITIZE_EMAIL удалит все символы, которые не должен содержать email-адрес. То есть, проверки данных не происходит.
    $search_url = filter_input(INPUT_GET, ‘search’, FILTER_SANITIZE_ENCODED);
    
  • ctype_alnum() - Проверяет на наличие буквенно-цифровых символов.
  • ctype_alpha() - Проверяет на наличие буквенных символов.
  • ctype_cntrl() - Проверяет на наличие управляющих символов.
  • ctype_digit() - Проверяет на наличие цифровых символов в строке.
  • ctype_graph() - Проверяет наличие всех печатных символов, кроме пробела.
  • ctype_lower() - Проверяет наличие символов в нижнем регистре.
  • ctype_print() - Проверяет на наличие печатных символов.
  • ctype_punct() - Проверяет на наличие печатных символов, которые в то же время не являются пробельными или буквенно-цифровыми символами.
  • ctype_space() - Проверяет наличие пробельных символов.
  • ctype_upper() - Проверяет на наличие символов в верхнем регистре.
  • ctype_xdigit() - Проверяет наличие шестнадцатеричных цифр.

filter_var($variable, $filter)

  • Фильтрует переменную с помощью определенного фильтра.