我在我的代码中启用了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>
我做错了什么?
答案 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);
......
......