如何在CodeIgniter 3中配置Content-Security-Policy响应头?
在CodeIgniter 3中设置Content-Security-Policy响应头的解决方案
你的代码存在两处问题导致未生效,以下是修正方案及其他可行的实现方式:
一、修正控制器中的代码
CI3 的$this->output->set_header()方法仅接受单个参数,需将响应头名称与值合并为一个字符串传入;同时你拼写错误了'unsafe-inline'(写成了'unsafe-inine'),修正后的代码如下:
// 在控制器的__construct方法或具体业务方法中 $this->output->set_header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';");
二、通过钩子全局设置(推荐)
若需要全站生效,无需在每个控制器重复编写代码,可使用CI3的钩子功能:
- 打开
application/config/config.php,启用钩子:
$config['enable_hooks'] = TRUE;
- 打开
application/config/hooks.php,添加钩子配置:
$hook['post_controller_constructor'][] = array( 'function' => 'set_csp_header', 'filename' => 'CspHook.php', 'filepath' => 'hooks' );
- 在
application/hooks/目录下创建CspHook.php文件,写入内容:
<?php function set_csp_header() { $CI =& get_instance(); $CI->output->set_header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';"); }
三、通过.htaccess设置(Apache服务器)
如果你的服务器是Apache,可直接在项目根目录的.htaccess中添加以下代码:
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';"
验证生效状态
打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面后查看对应请求的「响应头」,确认是否存在Content-Security-Policy字段。
内容的提问来源于stack exchange,提问作者Shubham Nayak
相关产品推荐
相关产品推荐

