Насколько безопасна / очищена функция wp_insert_posts ()?

13

Глядя на Кодекс для wp_insert_post (), он утверждает, что эта функция «... очищает переменные, выполняет некоторые проверки, заполняет отсутствующие переменные, такие как дата / время и т. Д.» (РЕДАКТИРОВАТЬ: я обновил запись Кодекса, чтобы включить более надежный пример включает в себя безопасность, а также метаданные и назначение категории)

Просто интересно, нужно ли мне проводить дальнейшую дезинфекцию, чтобы предотвратить взломы XSS и тому подобное, или достаточно ли делается с помощью функции.

Честно говоря, я проверил функцию в ядре и не нашел, например, wp_kses () или другой очистки для post_content, поэтому я немного обеспокоен. Все, что я могу видеть, это делает stripslashes_deep () на данных.

Так должен ли я запускать wp_kses () или что-то еще, когда я строю свои аргументы для wp_insert_post ()?

Какова лучшая практика здесь? Кодекс довольно осторожен в отношении безопасности в своем примере.

Благодарность

Том Оже
источник
2
Это только предотвращает внедрение SQL. Если вы хотите запустить kses для контента, вам придется сделать это самостоятельно. WP не может угадать, какой HTML удалить. Что если сообщение отправлено администратором, и он хочет вставить его <script>внутрь?
onetrickpony
Хорошо, приятно знать. wp_kses_post () для всего, а wp_kses_title () для заголовка!
Том Оджер
Обновлен Кодекс, чтобы показать пример проверки данных и wp_insert_posts ().
Том Оджер

Ответы:

11

Вам не нужно ничего делать.

На загрузке WP:

'init' hook -> kses_init() -> kses_init_filters()

Потом:

wp_insert_post() -> sanitize_post() -> sanitize_post_field() -> 'content_save_pre' -> wp_filter_post_kses()

Аналогично для заголовков сообщений, текста комментариев и т. Д.

Вывод: wp_insert_post () очень очищен. :)

scribu
источник
Спасибо Scribu за это исправление - безусловно, лучший путь! Хотелось бы, чтобы вы не удалили весь этот фрагмент кода, потому что это была также хорошая иллюстрация других аспектов использования wp_insert_post (), которых не покрывает основной пример.
Том Оджер
Да, я тоже немного расстроился из-за этого. Однако, это было за рамками wp_insert_post (). Я думаю, что отдельный учебник сверху вниз был бы лучше.
scribu
Обновленный ответ и кодекс, а также.
scribu
LOL @ последнее редактирование. иногда требуется некоторое копание, чтобы найти все золото, уже похороненное в ядре :) Я потерял нить, когда отслеживал ее. Похоже, ты лучший придурок, чем я! Спасибо за то, что придерживаетесь этого и обновляете кодекс.
Том Ожер