CodeIgniter,Csrf令牌

时间:2016-07-22 09:33:02

标签: php codeigniter

我有麻烦

查看

<form method="post" action="test/csrf">
<input type="hidden" name="<?=$this->security->get_csrf_token_name();?>" value="<?=$this->security->get_csrf_hash();?>">

控制器

echo $this->input->post($this->security->get_csrf_token_name());

我无法显示令牌代码

1 个答案:

答案 0 :(得分:1)

  

访问控制器中的Csrf令牌

在控制器中你可以得到csrf的名称和值,如下所示

        echo $this->security->get_csrf_token_name(); // for the name
        echo $this->security->get_csrf_hash();  // for the value    
  

在配置文件中启用CSRF

 $config['csrf_regenerate'] = TRUE;
  
      
  1. 使用表单助手
  2. 使用CSRF令牌   

我们有两种方式来添加CSRF令牌;如果我们考虑使用CodeIgniter表单帮助程序类更新您的表单,则会自动添加CSRF令牌,或者如果您打算在自定义表单中进行调整,那么我们需要添加自定义隐藏输入名称及其值。

当我们使用表单助手类时:

  <?php echo form_open(base_url( 'user/login' ), array( 'id' => 'login', 'class' => 'login' ));?>
      <input type="text" name="username" />
      <input type="password" name="password" />
      <input type="submit" name="submit" value="Submit" />
  <?php echo form_close();?>

使用表单助手类会自动将输入字段添加到表单中,并带有随机标记值以防止CSRF。

  
      
  1. 当我们使用自定义表单时:
  2.   

我们需要添加输入字段以防止我们使用CSRF自定义表单。

    $csrf = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
    );

     <input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

如果使用表单助手,则form_open()将自动在表单中插入隐藏的csrf字段。如果没有,

  

然后你可以使用get_csrf_token_name()和get_csrf_hash()

http://www.codeigniter.com/user_guide/libraries/security.html

http://www.sks.com.np/secure-your-codeigniter-application-using-csrf-token/