【发布时间】:2022-01-25 21:07:58
【问题描述】:
我想在我的 Wordpress 网站上正确使用内容安全策略,但也不想硬编码 URI。
我将所有内联脚本移动到一个文件中,并将哈希添加到所有脚本标签以与子资源完整性一起使用。
ajax 本地化让我很难过;它运行 PHP 来获取 JS 文件名,并将其内联输出到一个对象(由 ajax 调用使用)。
为了使admin-ajax 可用,我有
global $wp_query;
wp_localize_script('project-js', 'ajax_object', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'some_vars' => json_encode($wp_query->query)
));
哪些输出:
<script type="text/javascript" id="project-js-js-extra">
/* <![CDATA[ */
var ajax_object = {"ajaxurl":"http:\/\/domain.tld\/wp\/wp-admin\/admin-ajax.php","some_vars":"[]"};
/* ]]> */
</script>
我需要能够向这个标签添加一个哈希,但我找不到正确的方法。
我可以像这样在 PHP 中生成它:
global $wp_scripts;
$l10n_candidate = array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'some_vars' => json_encode( $wp_query->query )
);
$script_content = "/* <![CDATA[ */
var ajaxpagination = " . wp_json_encode( $l10n_candidate ) . ';
/* ]]> */';
$script_hash = hash('sha256', $script_content);
但我不知道如何正确地将其添加到页面中,而且感觉太hacky了。
如果不输出此哈希,或将此对象创建移动到我的主 JavaScript 文件,页面将不会通过我的 CSP 并且脚本将不会运行。
我该如何做到这一点?
【问题讨论】:
标签: javascript php wordpress content-security-policy custom-wordpress-pages