¿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


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. :)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.