在没有表格的情况下获取 Codeigniter CSRF 令牌?

Posted

技术标签:

【中文标题】在没有表格的情况下获取 Codeigniter CSRF 令牌?【英文标题】:Getting Codeigniter CSRF token without a form? 【发布时间】:2012-11-03 10:29:32 【问题描述】:

我在我的站点上启用了 CSRF 保护,但 CSRF 令牌唯一一次放置在隐藏字段中是在使用 form_close() 时。我正在通过 ajax 发布数据,并且还需要发送 CSRF 以防止出现 500 错误。

我认为有一种方法可以将 CSRF 令牌显式嵌入到页面中,但我似乎找不到它。

页面没有表单时如何获取 CSRF 令牌?

【问题讨论】:

Ajax form + CSRF results in a failing request Sam 输入错误,通过 $this->security->get_csrf_hash() 在页面上设置令牌;然后只需拉 _TOKEN 值,例如。数据: _TOKEN: $('input[name="_TOKEN"]').val(), 【参考方案1】:

这是一个示例,向您展示如何启用 CSRF 攻击模式:

<script>
    
  var cct = '<?php echo $this->security->get_csrf_hash() ?>';
  var get_csrf_token_name = '<?php echo $this->security->get_csrf_token_name() ?>';
  
   $.ajaxSetup(
   type:'post',
  data: <?php echo $this->security->get_csrf_token_name() ?> :cct
   );
   
  
    var siteurl = '<?= site_url()?>';        
       
   </script>

【讨论】:

【参考方案2】:

您可以通过安全类获取 CSRF 令牌名称和值:

$this->security->get_csrf_hash();
$this->security->get_csrf_token_name();

【讨论】:

奇怪,在文档中找不到,但这正是我想要的。谢谢【参考方案3】:

以这种方式将其添加到表单中

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">

【讨论】:

以上是关于在没有表格的情况下获取 Codeigniter CSRF 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 3:不要在表单验证错误时重新加载表单

如何在没有 codeIgniter MVC 框架的情况下使用数据库 codeigniter 类?

如何在没有没有索引的 url 的情况下调用 codeigniter 控制器功能

在没有 index.php 的情况下,codeigniter 重定向不起作用?

如何在没有配置的情况下设置分页链接的样式 - codeigniter

从数据库Codeigniter获取Lang