php - 添加 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');
解决方案
推荐阅读
- python - 有没有办法在带有循环的字典中自行生成相似的键名和值?
- java - 如何从 Java Springboot 执行复杂的 MongoDB 本机查询
- python - 抓取屏幕的特定部分并使其成为在 Python 中自我更新的图像
- python - 如何自动将照片上传到网站?
- git - Git:ftp不是命令
- php - 带有选择过滤器的表
- python - PyTorch 数据集/数据加载器批处理
- python - Python范围和for循环
- javascript - JavaScript toLowerCase() 方法在我的反应应用程序中返回错误
- sql - SQL 子查询将只检查一列,当要求检查 2 相同查询时失败