Наскільки безпечним / дезінфікованим є wp_insert_posts ()?


13

Дивлячись на Codex для wp_insert_post (), він зазначає, що ця функція "... дезінфікує змінні, робить деякі перевірки, заповнює пропущені змінні, такі як дата / час тощо" (EDIT: я оновив запис Codex, щоб включити більш надійний приклад що включає захист, а також призначення мета і призначення категорії)

Мені цікаво, чи потрібно мені робити якісь додаткові дезінфекції для запобігання злому 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 за цю корекцію - безумовно, кращий шлях! Хоча я хотів би, щоб ви не викреслили цей фрагмент коду, оскільки це була також хороша ілюстрація інших аспектів використання wp_insert_post (), які головний приклад не охоплює.
Том Оже

Так, теж погано почувався в цьому. Однак це було поза рамками wp_insert_post (). Окремий підручник, що зверху вниз, буде краще, я думаю.
scribu

Оновлений відповідь і кодекс також.
scribu

lol @ остання редакція Іноді потрібно щось викопати, щоб знайти все золото, вже поховане всередині ядра :) Я втратив нитку, коли відшукував її назад. Схоже, ти кращий слюта, ніж я! Дякуємо за дотримання цього та оновлення кодексу.
Том Оже
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.