2016-02-19 64 views
0

首先,這個很少發生。表單本身已成功提交500次以上。我們收到了大約3份報告,其中用戶收到「遇到錯誤:您請求的操作不被允許」Codeigniter CSRF有時會引發錯誤

這個特定的錯誤可以在Security Class php代碼中找到,並且僅當csrf標記不行,或者如果一個或兩個(cookie/post)缺失時纔會顯示此特定錯誤。

這裏有一些相關的配置值:

$config['cookie_prefix'] = 'prefix_'; 
$config['cookie_domain'] = ''; 
$config['cookie_path'] = '/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 
$config['csrf_protection'] = TRUE; 
$config['csrf_token_name'] = 'csrf'; 
$config['csrf_cookie_name'] = 'csrf'; 
$config['csrf_expire'] = 86400; 
$config['csrf_regenerate'] = FALSE; 

至於說,在幾乎所有情況下,用戶都沒有問題提交表單。當用戶確實遇到問題時,我嘗試通過使用相同的輸入值完全相同的瀏覽器/操作系統(啓用了cookie和javascript,沒有瀏覽器插件)提交表單來複制錯誤。但我無法模擬錯誤。

什麼可能導致Codeigniter有時會拋出錯誤?

回答

0

是否允許用戶提交表單兩次(第一次提交後沒有添加表單阻止程序,所以在第一次請求處理時,用戶可以再次使用相同的CSRF值提交此表單)?如果是這樣,當用戶提交表單兩次時,第一個請求調用CSRF重新生成csrf-value,第二個請求用戶發送,發送舊的CSRF值,因此出現此錯誤。

+0

他們可以提交表單兩次。但他們必須快速。頁面延遲非常低,我們會檢查重複項。除此之外,'$ config ['csrf_regenerate'] = FALSE;'應該防止再生csrf標記。 – Diederik