2016-07-22 247 views
0

我有麻煩笨,CSRF令牌

查看

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

我不能顯示令牌代碼

+0

,你不能顯示令牌代碼?視圖還是控制器? – Poonam

回答

1

訪問令牌CSRF在控制器

在控制器u能得到名稱和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. 二手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。

  • 當我們使用自定義表單:
  • 我們需要添加歸檔,以防止我們的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/

    +0

    這是我的新測試代碼和失敗T_T http://pastebin.com/itBt0cgY –

    +0

    如果你使用表單助手沒有設置自定義令牌的要求表單助手自動生成令牌 – pradeep

    +0

    只需使用form_open和form_close令牌會產生。確保你有$ config ['csrf_regenerate'] = TRUE;並添加幫手安全 – pradeep