【问题标题】:CodeIgniter , Csrf tokenCodeIgniter , Csrf 令牌
【发布时间】:2020-02-13 17:12:44
【问题描述】:

我有麻烦

查看

<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());

我无法显示令牌代码

【问题讨论】:

  • 哪里不能显示令牌代码?视图还是控制器?

标签: php codeigniter


【解决方案1】:

在控制器中访问 Csrf Token

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

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

在配置文件中启用 CSRF

 $config['csrf_protection'] = TRUE;
 $config['csrf_expire'] = 7200;
 $config['csrf_regenerate'] = TRUE;

1.使用表单助手使用 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。

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/

【讨论】:

  • 如果您使用表单助手,则无需设置自定义令牌,表单助手会自动生成令牌
猜你喜欢
  • 2016-01-31
  • 2011-09-28
  • 2016-07-14
  • 1970-01-01
  • 2011-07-19
  • 2021-05-14
  • 2013-09-18
  • 2016-04-25
  • 2016-02-10
相关资源
最近更新 更多