WordPress / Woocommerce Inline Javascript с добавлением Nonce и CSP не работает должным образом - PullRequest
1 голос
/ 19 февраля 2020

Я пытался добавить одноразовый номер к встроенному JS в Wordpress, в первую очередь с фокусом на WooCommerce. Пока что мне удалось добавить Nonce в зарегистрированный JS, но встроенный код JS, сгенерированный из плагинов, таких как Woocommerce, не добавляет 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>';
}

Подход, который не работает, возможно, потому что я не знаю правильного $ var для данных Чтобы перейти к приведенному ниже решению от Woocommerce, любые рекомендации будут оценены.

Пример кода, который я пытаюсь настроить.

<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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...