Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

172
Views
CSP y localización de scripts en wordpress

Quiero usar correctamente la Política de seguridad de contenido en mi sitio de Wordpress, pero no los URI de código fijo.

Estoy moviendo todos mis scripts en línea a un archivo y agregando hashes a todas las etiquetas de script para usar con Subresource Integrity.

La localización ajax me hace pasar un mal rato; Ejecuta PHP para obtener el nombre del archivo JS y lo envía en línea a un objeto (que es utilizado por las llamadas ajax).

Para que admin-ajax esté disponible, tengo

 global $wp_query; wp_localize_script('project-js', 'ajax_object', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'some_vars' => json_encode($wp_query->query) ));

Qué salidas:

 <script type="text/javascript" id="project-js-js-extra"> /* <![CDATA[ */ var ajax_object = {"ajaxurl":"http:\/\/domain.tld\/wp\/wp-admin\/admin-ajax.php","some_vars":"[]"}; /* ]]> */ </script>

Necesito poder agregar un hash a esta etiqueta, pero no puedo encontrar la forma correcta.

Puedo generarlo en PHP como:

 global $wp_scripts; $l10n_candidate = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'some_vars' => json_encode( $wp_query->query ) ); $script_content = "/* <![CDATA[ */ var ajaxpagination = " . wp_json_encode( $l10n_candidate ) . '; /* ]]> */'; $script_hash = hash('sha256', $script_content);

Pero no sé cómo agregar esto a la página correctamente y, además, se siente demasiado raro.

Sin generar este hash o mover la creación de este objeto a mi archivo JavaScript principal, la página no pasará mi CSP y el script no se ejecutará.

¿Cómo logro esto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

A partir de este momento, la única forma en que pude resolverlo es usando [wp_enqueue_scripts][1], que es el enlace que usa [wp_enqueue_script][2] cuando utiliza [wp_localize_script][3]

No parece la mejor solución, pero funciona.

 function abr_ajax_pagi_obj(){ global $wp_query; $l10n_candidate = array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'some_vars' => json_encode( $wp_query->query ), ); $script_content = "/* <![CDATA[ */ var ajaxpagination = " . wp_json_encode( $l10n_candidate ) . '; /* ]]> */'; $script_hash = 'sha256-' . base64_encode(hash('sha256', $script_content,true)); ?><script integrity="<?php echo $script_hash?>"><?php echo $script_content;?></script><?php } add_action( 'wp_enqueue_scripts', 'abr_ajax_pagi_obj', 5, 5 ); [1]: https://developer.wordpress.org/reference/hooks/wp_enqueue_scripts/ [2]: https://developer.wordpress.org/reference/functions/wp_enqueue_script/ [3]: https://developer.wordpress.org/reference/functions/wp_localize_script/
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!