Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

222
Vistas
¿Es arriesgado usar wp_update_post con AJAX para enviar grandes bloques de HTML?

Estoy creando un editor frontal que usa AJAX para actualizar el contenido de la página.

Se actualiza utilizando JS para tomar fragmentos de componentes HTML y guardarlos en el contenido de la página, envueltos en etiquetas <!-- wp:html --> .

La función solo está disponible si el usuario ha iniciado sesión y se ha seleccionado la opción de editor frontal (opción de tema personalizado).

El código AJAX es:

 function scedPage(post_id) { var pageComs = ["<!-- wp:html -->"]; jQuery('section component').each(function () { $this0 = jQuery(this)[0].outerHTML; pageComs.push($this0); }); pageComs.push("<!-- /wp:html -->"); pageHtml = pageComs.join(' '); console.log(pageHtml); jQuery.ajax({ type: "POST", url: ajax_object.ajaxurl, async: true, data: { action: 'sced_page', post_content: pageHtml, postId: post_id }, success: function (data) { location.reload(); }, error: function (error) { console.log(error) } }); };

El PHP es:

 function sced_page() { $dev_sced = get_option('scale_opt_field2'); if (current_user_can('editor') || current_user_can('administrator')) { if ($dev_sced !== "1") { } else if ($dev_sced == "1") { $post_id = $_POST['postId']; $post_content = $_POST['post_content']; $the_post = array(); $the_post['ID'] = $post_id; $the_post['post_content'] = $post_content; $post_id = wp_update_post($the_post); wp_die(); add_action( 'wp_ajax_sced_page', 'sced_page' ); } } };

¿La publicación de grandes bloques de HTML sin escapar/sin filtrar representa un problema? Me doy cuenta de que tendré que agregar nonce allí.

Gracias por tu ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

¿La publicación de grandes bloques de HTML sin escapar/sin filtrar representa un problema?

TLDR ;

Sí, existe la posibilidad de que su código sea explotado por usuarios maliciosos, por lo que desinfectaría la entrada del usuario usando wp_kses_posts() antes de guardarlo en la base de datos (o antes de mostrar el contenido en el sitio web).


Dado que está comprobando las capacidades de los usuarios y espera que sean editores o administradores, que son roles que normalmente asigna a las personas en las que confía, en teoría podría sonar bien guardar lo que envíen en la base de datos.

Sin embargo, la experiencia me ha enseñado, y muchos otros seguramente dirán lo mismo, que nunca debes confiar en la entrada del usuario. Desinfecte/escape los datos siempre que sea posible. Haz de este tu mantra personal como desarrollador y ahórrate algunos problemas a tu Future Self.

 $post_content = wp_kses_post($_POST['post_content']);

No está relacionado con su pregunta original, pero quería señalar un par de cosas sobre su código si está bien:

  • Su primera condición if no está haciendo nada. ¿Es ese código incompleto o...?
  • Este add_action( 'wp_ajax_sced_page', 'sced_page' ); nunca se ejecutará: nada después de wp_die(); va a ser ejecutado por el servidor.
  • Debe verificar si $_POST['postId'] y $_POST['post_content'] están configurados usando isset() antes de intentar acceder a ellos.
  • Sí, usar un nonce sería una buena idea :P
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda