(Codeigniter)Ion Auth CSRF错误:此表单帖子未通过我们的安全检查(加载视图时)



我在Codeigniter中使用Ion Auth身份验证库。当我加载页脚视图时,我收到一个CSRF错误(此表单帖子没有通过我们的安全检查)。当我删除页脚视图时,它工作得很好!我在这里做错了什么吗?谢谢

function edit_user($id) {
//I'm only posting the last part of the code of edit_user function in the auth controller
    $this->load->view('layout/header');
    $this->_render_page('auth/edit_user', $this->data);
    $this->load->view('layout/footer'); // I'm getting an error when I load this footer view.
} 

这是我认为的代码。

<h1><?php echo lang('edit_user_heading');?></h1>
<p><?php echo lang('edit_user_subheading');?></p>
<div id="infoMessage"><?php echo $message;?></div>
<?php echo form_open(uri_string());?>
      <p>
            <?php echo lang('edit_user_fname_label', 'first_name');?> <br />
            <?php echo form_input($first_name);?>
      </p>
      <p>
            <?php echo lang('edit_user_lname_label', 'last_name');?> <br />
            <?php echo form_input($last_name);?>
      </p>
      <p>
            <?php echo lang('edit_user_company_label', 'company');?> <br />
            <?php echo form_input($company);?>
      </p>
      <p>
            <?php echo lang('edit_user_phone_label', 'phone');?> <br />
            <?php echo form_input($phone);?>
      </p>
      <p>
            <?php echo lang('edit_user_password_label', 'password');?> <br />
            <?php echo form_input($password);?>
      </p>
      <p>
            <?php echo lang('edit_user_password_confirm_label', 'password_confirm');?><br />
            <?php echo form_input($password_confirm);?>
      </p>
     <h3><?php echo lang('edit_user_groups_heading');?></h3>
    <?php foreach ($groups as $group):?>
    <label class="checkbox">
    <?php
        $gID=$group['id'];
        $checked = null;
        $item = null;
        foreach($currentGroups as $grp) {
            if ($gID == $grp->id) {
                $checked= ' checked="checked"';
            break;
            }
        }
    ?>
    <input type="checkbox" name="groups[]" value="<?php echo $group['id'];?>"<?php echo $checked;?>>
    <?php echo $group['name'];?>
    </label>
    <?php endforeach?>
      <?php echo form_hidden('id', $user->id);?>
      <?php echo form_hidden($csrf); ?>
      <p><?php echo form_submit('submit', lang('edit_user_submit_btn'));?></p>
<?php echo form_close();?>

Ion auth-csrf保护较旧。CI-2已经有

这是在张贴表单时提供的安全性,例如:POST来自本地还是服务器?

离子身份验证控制器文件,您可以看到下面类似的代码:

// do we have a valid request?
if ($this->_valid_csrf_nonce() === FALSE)
{
   show_error($this->lang->line('error_csrf'));
}

如果你删除这些验证,你将不会得到csrf错误

您可以使用CI核心库启用安全性

http://ellislab.com/codeigniter/user-guide/libraries/security.html

$config['csrf_protection'] = TRUE;

您必须使用form_open()标记来触发csrf保护。

当我尝试将common/headercommon/footer添加到auth/reset_password页面时,也出现了同样的问题。

问题是我对页脚部分中包含的JS使用了相对路径。经过大量使用base_url()的实验,解决了这个问题。

我有销售pb,但用用户数据替换了flashdata,这只是不太安全,但这是一个很好的解决方案。

最新更新