【发布时间】:2021-09-23 13:41:44
【问题描述】:
我已经通过谷歌阅读了关于 stackoverflow 和其他文章的几个主题。我尝试了所有建议的方法,但是当我通过 Jquery 发出 AJAX 请求时,CSRF 对我不起作用。
Codeigniter 版本:3.1.11
JQuery 版本:2.1.4
JQuery Cookie 版本:1.4.1
config.php
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = BASEPATH . 'cache/';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = TRUE;
$config['cookie_httponly'] = TRUE;
$config['standardize_newlines'] = FALSE;
$config['global_xss_filtering'] = TRUE;
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'my_csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();
$config['compress_output'] = FALSE;
$config['time_reference'] = 'local';
$config['rewrite_short_tags'] = FALSE;
$config['proxy_ips'] = '';
不工作的 JQuery 代码
$.ajax({
type: "post",
url: "<?php echo base_url(); ?>" + "controllername/controllerfunction/parameter",
data: {key1: val1, key2: val2, <?php echo $this->security->get_csrf_token_name();?> : $.cookie("<?php echo $this->config->item("csrf_cookie_name"); ?>") },
success: function(res){
if(res) {
//do something
}
},
error: function(res, status, error) {
//do something
}
});
我在网络标签中遇到错误
您请求的操作不被允许。
工作正常的是替换 AJAX 请求的数据部分
data: {key1: val1, key2: val2, <?php echo $this->security->get_csrf_token_name();?> : '<?php echo $this->security->get_csrf_hash();?>' },
但这会在我的网页源中显示 HASH VALUE,而且我无法从一个页面点击多个 AJAX 请求,因为 CI 会在每个 POST 请求上重新生成新的哈希
问题 1:
如何让这个$.cookie("<?php echo $this->config->item("csrf_cookie_name"); ?>" 工作?
问题 2:
如果我标记$config['csrf_regenerate'] = TRUE;,则只有1个AJAX请求在一个页面上有效,其他按钮拒绝工作,可能是因为CI在1次执行后创建了一个新的哈希,而页面仍然有旧的哈希。那么,如果我的问题 1 解决了,问题 2 会自动解决吗?
更新:
我发现设置 $config['cookie_httponly']= FALSE; 允许 Jquery 获取 cookie 值。
是否可以保持此设置为 TRUE 并仍然从 JQuery AJAX 获取 Cookie 信息?
【问题讨论】:
标签: php jquery codeigniter security csrf