403禁止,即使我把csrf名称和值放在表格中

时间:2017-04-29 11:32:51

标签: php codeigniter csrf

我在我的代码中启用了CSRF安全性:

#include <iterator>

template <class RandomIt>
void reverse_sort(RandomIt first, RandomIt last)
{
    std::sort(first, last, 
        std::greater<typename std::iterator_traits<RandomIt>::value_type>());
}

现在,我在表单中添加了一个隐藏字段:

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

在我的表格中,我收到了数据:

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

但是,我仍然遇到如下错误:

csrf_test_name:50711c69fc79244945f0aaecf7ac1aa4
teacher_name:
teacher_mobile:
teacher_email:
teacher_about:

我正在使用ajax调用发送数据:

<h1>An Error Was Encountered</h1>
        <p>The action you have requested is not allowed.</p>    </div>

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我建议您更改一个CSRF配置设置:

handleChange(field, value) {
    this.setState({ [field]: value });
}

<input
  onChange={e => this.handleChange('firstName', e.target.value)}
/>

看看是否有帮助。

如果要在每个POST上重新生成散列并使用AJAX,则需要将新散列返回到浏览器并更新CSRF隐藏字段值,以便下一个POST将通过安全检查。

使用Form Helper而不是手动创建隐藏的CSRF输入是明智之举。在一个看起来像

的视图中
$config['csrf_regenerate'] = FALSE;

echo form_open('controller/method'); here上的文档。

了解如何使用form_open()添加隐藏的CSRF here

答案 1 :(得分:0)

一旦尝试在ajax请求中添加csrf而不是form.Its对我有用

以下是代码:

submitHandler: function (form) {
            var URL = $("#teacherForm").attr("action");
            var METHOD = $("#teacherForm").attr("method");
var data= $(form).serialize();
var post_data = {
                        'result': data,
  '<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash(); ?>'
                    };
            $.ajax({
                type: METHOD,
                url: URL,
                data:post_data,
                success: function (data) {
                    var data = $.parseJSON(data);
                     ......
                     ......