2011-07-28 166 views
2

我已經在Codeigniter中啓用了csrf保護。使用form_open()我能夠產生一個隱藏的csrf值,應該在我的控制器中進行驗證。不過,我沒有提交任何輸入字段,只是通過表單操作傳遞一個URL參數。Codeigniter csrf保護沒有表單驗證

在我的控制,我不需要設置驗證規則,所以我有

function delete_post($post_id = '') //post id passed via 3rd URL segment 
{ 
    if (is_int($post_id) && valid_post($post_id)) //valid_post() returns true if post id exists 
    { 
     $this->Posts_model->delete_post_model($post_id);   
     redirect('site'); 
    }     
} 

CSRF保護似乎並沒有驗證規則工作。是否可以通過隱藏輸入而不通過post_id來完成這項工作?

+0

你可以發佈表單嗎? –

回答

3

正如您所見,in the code of the Security class,CSRF保護僅適用於POST數據(表單驗證也適用於POST數據)。

您應該以此CodeIgniter方式並使用POST請求。如果您使用的是AJAX,那麼只需將GET更改爲POST,並且如果您使用的是表單,請將方法設置爲post。如果你不能這樣做,那麼你將不得不對抗CodeIgniter核心代碼,所以試着解釋原因。 :)