Валидация и очистка данных
Урок 12
В этом видеоуроке я поговорю об очистке данных в WordPress на примере нашего плагина. Также я приведу пример небезопасного кода и сразу же взломаю его.
Чтобы скачать плагин, который получился в процессе этого урока, нужно купить курс.
Когда мы говорим об очистке данных, то можно разделить её на очистку ввода данных и очистку вывода. Давайте чуть детальнее остановимся на каждой из них.
Проще понять очистку ввода можно, если представить, что пользователь должен ввести своё имя в обычное текстовое поле <input type="text">
. Достаточно подумать о ситуации, если пользователь решит выделить своё имя жирным цветом и написать <strong>Миша</strong>
. Тогда в базе данных в ячейке, в которой у нас хранятся имена пользователей, будет встречаться одно (или несколько) имён, содержащие HTML-теги, а может быть переносы строк и т.д.
Именно поэтому, перед тем, как сохранять пользовательский ввод в базу данных, мы должны очистить поле соответствующим образом. Ну в зависимости от того, какое поле.
update_user_meta( $post_id, 'first_name', sanitize_text_field( $_POST[ 'first_name' ] ) );
Рассмотрим несколько функций, предназначенных для этого:
Функция | Назначение |
---|---|
sanitize_text_field() | Очистка обычных текстовых полей <input type="text"> |
sanitize_textarea_field() | Очистка полей <textarea> . |
sanitize_email() | Очистка email-адресов от недоступных символов, или ввода в <input type="email"> |
absint() | Целые неотрицательные числа |
intval() | Любые целые числа |
abs() | Неотрицательные числа |
Функций очистки намного больше, но выше – те, с которыми приходится встречаться чаще всего.
Главное правило здесь – не доверяй никому и никогда. То есть, даже если вы очистили весь пользовательский ввод, мы не можем доверять базе данных.
Предположим мы хотим вывести имя того же пользователя, но опять-таки предполагаем, что в базе данных оно может быть записано с HTML-тегами <strong>Миша</strong>
, поэтому перед выводом мы должны очистить строку.
echo 'Ваше имя: ' . esc_html( get_user_meta( $user_id, 'first_name', true ) );
Рассмотрим несколько функций, предназначенных для этого:
Функция | Назначение |
---|---|
esc_html() | Экранирует HTML-теги |
esc_attr() | Экранирует символы, недоступные для использования в качестве HTML-атрибутов |
esc_url() | Используйте эту функцию для вывода чего-либо в атрибуты src="" или href="" |
esc_textarea() | Подготавливает строку для использования внутри тега <textarea> |
Функций очистки намного больше, но выше – те, с которыми приходится встречаться чаще всего.