在没有表格的情况下获取 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 重定向不起作用?