¿Qué tan seguro / desinfectado es wp_insert_posts ()?

13

Mirando el Codex para wp_insert_post () , establece que esta función "... desinfecta las variables, realiza algunas comprobaciones, completa las variables faltantes como fecha / hora, etc." (EDITAR: Actualicé la entrada del Codex para incluir un ejemplo más robusto que incluye seguridad, así como meta meta y asignación de categoría)

Solo me pregunto si necesito hacer más desinfección para evitar hacks XSS y similares o si se está haciendo lo suficiente a través de la función.

Para ser honesto, he revisado la función en core y no he encontrado ningún wp_kses () u otra desinfección en post_content, por ejemplo, así que estoy un poco preocupado. Todo lo que puedo ver que hace es stripslashes_deep () en los datos.

Entonces, ¿debo ejecutar wp_kses () o cualquier otra cosa cuando construyo mis argumentos para wp_insert_post ()?

¿Cuál es la mejor práctica aquí? El Codex es bastante arrogante sobre la seguridad en su ejemplo.

Gracias

Tom Auger
fuente
2
Solo evita la inyección de SQL. Si desea ejecutar kses en el contenido, deberá hacerlo usted mismo. WP no puede adivinar qué HTML eliminar. ¿Qué sucede si la publicación la envía un administrador y él desea insertar una <script>dentro?
onetrickpony
Bien, es bueno saberlo. ¡wp_kses_post () en todo entonces y wp_kses_title () en el título!
Tom Auger
Se actualizó el Codex para mostrar un ejemplo de validación de datos y wp_insert_posts ().
Tom Auger el

Respuestas:

11

No tienes que hacer nada.

En carga WP:

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

Luego:

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

Del mismo modo para títulos de publicaciones, textos de comentarios, etc.

Conclusión: wp_insert_post () está muy desinfectado. :)

scribu
fuente
Gracias Scribu por esa corrección, ¡definitivamente es una mejor manera de hacerlo! Aunque desearía que no hubiera desechado todo el fragmento de código, porque también fue una buena ilustración de otros aspectos del uso de wp_insert_post () que el ejemplo principal no cubre.
Tom Auger el
Sí, también me sentí mal por eso. Sin embargo, estaba más allá del alcance de wp_insert_post (). Un tutorial separado de arriba a abajo sería mejor, creo.
scribu
Respuesta actualizada y codex también.
scribu
lol @ última edición. a veces toma un poco de investigación encontrar todo el oro que ya está enterrado dentro del núcleo :) Perdí el hilo cuando lo estaba rastreando. ¡Parece que eres un mejor detective que yo! Gracias por seguir con esto y actualizar el códice.
Tom Auger