CSP与Cloudflare工作人员的非合作伙伴

时间:2020-11-21 作者:sebfaed

与本博客一样,我使用Cloudflare Workers在标题中注入CSP(内容安全策略):https://scotthelme.co.uk/csp-nonces-the-easy-way-with-cloudflare-workers/

这是功能性的。接下来,我需要将nonce注入到所有脚本标记中。我使用这个脚本(在functions.php中):

add_filter( \'script_loader_tag\', \'add_nonce_to_script\', 10, 3 );
function add_nonce_to_script( $tag, $handle, $source ) {

$search = "type=\'text/javascript\'";
$replace = "type=\'text/javascript\' nonce=\'<?= html_escape($cspNonce); ?>\'";
$subject = $tag;

$output = str_replace($search, $replace, $subject);
return $output;
}
结果不是预期的结果,我得到这样的代码:

script type="text/javascript" nonce="&lt;?= html_escape(); ?&gt;&lt;![CDATA[html5-dom-document-internal-cdata"
问题可能来自这一行,但我不知道如何纠正它:

$replace = "type=\'text/javascript\' nonce=\'<?= html_escape($cspNonce); ?>\'";
有人有主意吗?

1 个回复
SO网友:sebfaed

谢谢你的回答,你完全正确。

我也纠正了我的错误。如果有帮助,我会发布代码。

Cloudflare工作人员代码:https://gist.github.com/richie5um/b2999177b27095af13ec619e44742116

Wordpress代码:

add_filter( \'script_loader_tag\', \'add_nonce_to_script\', 10, 3 );
function add_nonce_to_script( $tag, $handle, $source ) {
$search = "type=\'text/javascript\'";
$replace = "type=\'text/javascript\' nonce=\'\'";
$subject = $tag;

$output = str_replace($search, $replace, $subject);
return $output;
}