首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Codeigniter中的CSRF包含到ajax数据中

如何将Codeigniter中的CSRF包含到ajax数据中
EN

Stack Overflow用户
提问于 2012-06-30 05:50:48
回答 6查看 16.1K关注 0票数 5

我试图将一些数据传递给我的控制器,但是我得到了一个500错误。经过一些研究,我发现这是由于没有发送CSRF令牌造成的。

似乎我需要在数据中包含以下内容:<?php echo $this->security->get_csrf_token_name(); ?>:"<?php echo $this->security->get_csrf_hash(); ?>"

我的JS非常弱,所以我对如何修改它以包含上面的内容有点困惑。

代码语言:javascript
运行
复制
<script type="text/javascript"> 
$(document).ready(function() {
    $("#order").sortable({
        update : function (event, ui) {
            order = $('#order').sortable('serialize');
            $.ajax({
                url: "<?=base_url().'admin/category/update_order'?>",
                type: "POST",
                data: order,
                success: function(response){
                    console.log(response);
                }
            });
        }
    });
}
);
</script>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-30 06:06:34

该令牌需要在$.ajaxdata参数中传递。

这应该可以工作,但请参阅我下面的说明。

order['<?php echo $this->security->get_csrf_token_name(); ?>'] = '<?php echo $this->security->get_csrf_hash(); ?>';

然而,这里有一些不好的做法。最重要的是,你不应该在你的javascript中使用PHP,因为这会阻止你将javascript作为一个单独的文件来访问(这很好,因为浏览器会缓存它,使你的页面加载更快,消耗更少的带宽)。

最好将令牌存储在您的订单<form> html中,如下所示。

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

然后,它将与其余的表单数据一起序列化。

还可以将URL存储在表单的action属性中。这将帮助您的脚本优雅地降级,并将URL保留在一个位置而不是两个位置。

代码语言:javascript
运行
复制
<form id="order" method="post" action="<?=base_url()?>admin/category/update_order">

$.ajax调用中,使用类似这样的url: $('#order').attr('action'),,假设#order是实际的表单id。

票数 4
EN

Stack Overflow用户

发布于 2012-07-01 07:53:23

CI将csrf存储在cookie中,您可以从那里获取它:

代码语言:javascript
运行
复制
var csrf = $.cookie('csrf_cookie_name');

这种方法的缺点是jQuery本身并不提供cookie访问。所以你需要一个jquery plugin

票数 2
EN

Stack Overflow用户

发布于 2012-06-30 06:03:31

您是对的,只需将CSRF令牌添加到您的帖子数据中。您可以使用jQuery的$.extend函数将已经创建的order对象与CSRF令牌数据合并,如下所示:

代码语言:javascript
运行
复制
$.extend(alerts, {
'<?php echo $this->security->get_csrf_token_name(); ?>' :
'<?php echo $this->security->get_csrf_hash(); ?>' });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11269439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档