Я создал собственный тип записи, в котором мы можем найти стандартную текстовую область / tinymce, сгенерированную с помощью, wp_editor()
и я столкнулся с проблемой для сохраняющей части.
Если я сохраню содержимое с помощью следующего кода:
update_post_meta( $post_id, $prefix.'content', $_POST['content'] );
Все работает нормально, но нет безопасности (дезинфекция, проверка и т. Д.)
Если я сохраню содержимое с помощью следующего кода:
update_post_meta( $post_id, $prefix.'content', sanitize_text_field($_POST['content']) );
Я решаю проблему безопасности, но теряю весь стиль, медиа и т. Д. В контенте.
Что может быть хорошим способом сохранить контент со всеми примененными стилями, со вставленными носителями, но с санитарной обработкой?
Я читал немного о, wp_kses()
но я не знаю, как я мог бы применить хороший фильтр. (Разрешение общих тегов, какой из них следует заблокировать? И т. Д.)
wp_kses
семьи.Ответы:
Вкратце: это зависит от вашего контекста, данных внутри вашего редактора.
wp_kses()
действительно полезно, и вы можете определить свой собственный допустимый HTML. Альтернативно вы можете использовать функции по умолчанию, какwp_kses_post
илиwp_kses_data
. Эти функции помогают гарантировать, что HTML, полученный от пользователя, содержит только элементы из белого списка. См. Https://codex.wordpress.org/Data_Validation#HTML.2FXML_FragmentsWordPress определяет гораздо больше функций для очистки ввода, см. Https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data и https://codex.wordpress.org/Data_Validation. Эти страницы действительно полезны.
Однако в вашем контексте следует
wp_kses_post
правильно выбрать функцию.источник
Пытаться
htmlentities()
преобразует все символы, которые имеют эквиваленты сущностей символов HTML, в их эквиваленты.sanitize_text_field()
Затем проверим наличие недействительных символов UTF-8 и удалим их. Теперь это можно сохранить в базе данных.html_entity_decode()
преобразует HTML-сущности в их эквиваленты в HTML-тегахисточник
Вы можете сделать что-то вроде этого:
@fuxia: как пишет OP:
«Я немного читал о wp_kses (), но не знаю, как применить хороший фильтр. (Допускает общие теги, какой из них следует блокировать? и т. д.)»
wp_kses выполняет следующие действия:
«Эта функция гарантирует, что в $ string будут содержаться только разрешенные имена элементов HTML, имена атрибутов и значения атрибутов, а также только здравые сущности HTML. Вы должны удалить любые слэши из магических кавычек PHP перед вызовом этой функции. "
https://codex.wordpress.org/Function_Reference/wp_kses
Мой код использует
wp_kses
«Разрешить общие теги». Каковы общие теги? Список доступен для чтения по данной ссылке. Это длинный список, поэтому я не вставил его сюда.https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
Я думаю, что сама текстовая область не должна быть разрешена в текстовой области.
@bueltge
wp_kses_post делает то же самое, за исключением разрешения тега '<textarea>', которого, я думаю, быть не должно.
https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/kses.php#L1575
источник
wp_slash Дополнительная информация.
источник