与本博客一样,我使用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="<?= html_escape(); ?><![CDATA[html5-dom-document-internal-cdata"
问题可能来自这一行,但我不知道如何纠正它:
$replace = "type=\'text/javascript\' nonce=\'<?= html_escape($cspNonce); ?>\'";
有人有主意吗?
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;
}