Безопасный ввод

Каждый раз, когда данные вводятся в WordPress, либо передаются через форму или из внешнего источника (фидов, вызовов API, и т.д.), убедитесь, что они безопасны, используя валидацию и обработку.

Валидация

Валидация гарантирует, что данные, полученные от пользователя или внешнего источника соответствуют тому, что ожидалось.

Например, поле ввода, подразумевающее получить почтовый индекс от пользователя:

Это текстовое поле позволяет ввести до пяти символов  без каких-либо ограничений по типам символов, которые могут быть использованы. Пользователи могут ввести что-то хорошее, как «11221» или что-то плохое, как «Eval(«. Валидацией мы обеспечиваем прием только почтовых индексов.

При обработке формы, ваш код должен проверять каждое поле для его надлежащего типа данных и отбросить все, что не соответствует. Например, вы можете проверить, что почтовый индекс (my-zipcode), состоит только из пяти чисел:

Атрибут maxlength для поля ввода исполняется только в браузере, так что вам также ​​нужно проверить длину ввода на сервере. Если вы этого не сделаете, злоумышленник может ухитриться и передать форму с более длинным значением.

intval() функция преобразовывает пользовательский ввод в целое число, по умолчанию ноль, если ввод был не числовое значение. Затем идет проверка, чтобы определить заканчивается ли число на ноль. Если это так, вы сохраняете пустое значение в базе данных. В противном случае, вы сохраняете правильный почтовый индекс.

Этот стиль валидации наиболее соответствует философии WordPress — позволяйте пользователю вводить только то, что вы ожидаете.

Вот еще один пример валидации. Допустим, вы собираетесь обратиться к базе данных за некоторыми записями, и вы хотите, чтобы пользователь мог выбрать из списка ключи для сортировки. В этом примере кода проверяется входящий ключ сортировки (названный orderby) и сравнивается с массивом допустимых значений, используя встроенную в PHP функцию in_array со включенной строгой проверкой по типу (что говорит PHP, что надо убедиться, что ключ сортировки не только находится в массиве, но и является строкой).

Обработка

Обработка — более либеральный подход к принятию пользовательских данных. Лучше использовать этот метод, когда существует диапазон для входящих данных.

Например, поле ввода, ожидающее от пользователей ввода заголовка:

Вы можете обработать данные с помощью функции sanitize_text_field():

Кроме прочего, sanitize_text_field делает следующее:

  • Проверяет некорректный UTF-8
  • Преобразует символ меньше чем (<) в сущности
  • Удаляет все теги
  • Удаляет переносы строк, табуляцию и лишние пробелы

sanitize_*() класс вспомогательных функций очень хорош, так как они обеспечивают в конечном итоге безопасность данных и требуют минимальных усилий с вашей стороны:

  • sanitize_email()
  • sanitize_file_name()
  • sanitize_html_class()
  • sanitize_key()
  • sanitize_meta()
  • sanitize_mime_type()
  • sanitize_option()
  • sanitize_sql_orderby()
  • sanitize_text_field()
  • sanitize_title()
  • sanitize_title_for_query()
  • sanitize_title_with_dashes()
  • sanitize_user()
  • esc_url_raw()
  • wp_filter_post_kses()
  • wp_filter_nohtml_kses()

Заключение

Каждый раз, когда вы принимаете потенциально опасные данные, важно произвести их валидацию или обработку. Валидация подтверждает, что данные такие, какими вы их ожидаете получить. Обработка является более либеральным подходом к очистке данных.

Навигация по разделам:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *