如何使用 PHP header-method 在 PHP 中使用 WordPress Nonces 实施内容安全策略?

How to implement Content Security Policy with WordPress Nonces in PHP using PHP header-method?

目前我正在尝试在 WordPress 登录页面上实施内容安全策略。我在 PHP 中使用以下 header-method 来实施内容安全策略:

header("Content-Security-Policy:default-src 'none'; script-src 'nonce-RandomSeq' 'nonce-hzthedtrh5' 'nonce-hjjftzrf56zf'  ... ")

我正在尝试使用 WordPress Nonce 为内联 Javascript 代码创建随机随机数

<?php
$nonce = wp_create_nonce( 'my-nonce' ); ?>

<script type="text/javascript" nonce="<?php echo $nonce; ?>">
  // some javascript code
</script>

当我用像“435234JHHJK2”这样的字符串指定随机数时,这个例子有效,但是当我尝试像这样在 header 中放置一个变量时:

header("Content-Security-Policy:default-src 'none'; script-src 'nonce-".$nonce."' 'nonce-hzthedtrh5' 'nonce-hjjftzrf56zf'  ... ")

无法识别由 wp-nonce 创建的随机数,并且不会执行给定的脚本。

那我做错了什么?

找到解决方案:

PHP 不接受单引号中的变量,例如 'noce-".$nonce."' 解决方案是将CSP中的信息全部保存在一个外部字符串变量中:

$csp = "Content-Security-Policy: script-src  'nonce-".$nonce1."' 'nonce-".$nonce2."'...";

并将此变量包含到 PHP header 方法中:

header( "{$csp}");