2016-01-20 118 views
1

我正在使用codeigniter,並且已經在config.php中啓用了csrf,如下所示。CSRF保護Codeigniter生成隨機令牌

$config['csrf_protection'] = TRUE; 
    $config['csrf_token_name'] = 'csrf_token'; 
    $config['csrf_cookie_name'] = 'csrf_cookie'; 
    $config['csrf_expire']  = 7200; 
    $config['csrf_regenerate']  = TRUE; 

然後爲了避免錯誤「遇到錯誤,請求的操作不被允許。」我已將以下代碼添加到Web視圖中的每個表單。

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>"> 

此代碼生成令牌和錯誤是cleared.But令牌是相同的每一頁,因爲<?php echo $this->security->get_csrf_hash(); ?>

當我在網頁中查看源代碼的源代碼時,令牌清晰可見。

我想知道的是這種方法防止csrf?或者我必須生成一個隨機標記?或者什麼是通過codeigniter防止csrf的最好方法。

回答

1

令牌是隨機的。但是,Codeigniter將使用相同的標記值,直到CSRF Coo​​kie到期爲止,或者,如果​​3210它將在每個POST請求上創建一個新標記值。

GET請求(即導航到站點上的某個其他頁面)不會生成新的令牌。

1

嘗試form_open('controller/method');爲html格式。

這將自動創建隱藏類型的隨機csrf令牌,無需手動執行。