首页 > 解决方案 > 添加 Nonce 和 CSP 的 WordPress/Woocommerce 内联 Javascript 未按预期工作

问题描述

我一直在尝试将 Nonce 添加到 Wordpress 中的内联 JS,主要关注 WooCommerce。到目前为止,我已经设法将 Nonce 添加到已注册的 JS 中,但是从 Woocommerce 等插件生成的内联 JS 代码没有添加 Nonce。

适用于注册 JS 的方法是......

add_filter( 'script_loader_tag', 'add_nonce_to_script2', 10, 3 );

function add_nonce_to_script2( $tag, $handle, $src ) {
    global $my_nonce2;
    $my_nonce2 = wp_create_nonce('my__script__nonce');
    return '<script type="text/javascript" src="' . esc_url( $src ) . '" nonce="nonce-' . esc_attr( $my_nonce2 ) . '"></script>';
}

不起作用的方法,可能是因为我不知道将数据从 Woocommerce 传递到以下解决方案的正确 $var,任何指导将不胜感激。

我试图定位的示例代码。

<script type='text/javascript'>
/* <![CDATA[ */
var wc_add_to_cart_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https:\/\/mysite.com\/cart\/","is_cart":"","cart_redirect_after_add":"no"};
/* ]]> */
</script>

下面不起作用的解决方案...

add_filter( 'script_loader_tag', 'add_nonce_to_script_tag', 10, 3 );

function add_nonce_to_script_tag( $tag, $handle, $src ) {

  // Check the $handle and respond accordingly
  if ( $handle === 'my-script' ) {
    $nonce_value = wp_create_nonce('my__script__nonce'); // or ref to an existing nonce
    $replace = sprintf("javascript' nonce='%s'>", $nonce_value );
    $tag = str_replace( "javascript'>", $replace, $tag);
  }

  return $tag;
}

// Then... $data is the inline JS from wherever
wp_add_inline_script('my-script', $data, 'before');

标签: phpwordpresswoocommercehook-woocommerce

解决方案


推荐阅读