2010-06-17 62 views
0

我有一個主控制器來處理我的驗證系統的前端,它處理登錄,註銷,更新用戶信息等功能,我希望通過POST來調用視圖/表格。那麼像「delete_user」函​​數呢?我的想法是某人管理面板上的一個按鈕會顯示「刪除帳戶」,它會發送到「/ auth/delete」,並且該功能會根據用戶的會話用戶名或ID刪除用戶。這似乎有點開放,你可以發送一個鏈接給某人,當他們在該應用程序中打開它時,它會刪除他們的帳戶。最好的辦法是什麼?控制器安全問題中的代碼點火器驗證碼

回答

0

我處理這個問題的方式如下。在您的帳戶頁面上,您有一個刪除帳戶的鏈接。他們點擊該頁面並與另一頁面打招呼,詢問他們是否真的有把握,如果需要,請輸入他們的密碼以確認他們確定。

他們這樣做後,我停用他們的帳戶(不刪除),併發送一封電子郵件說他們的帳戶已被停用,如果這意圖沒有其他行動需要他們的一部分。如果沒有打算他們可以登錄到他們的帳戶,它會重新激活它。 (48小時內)48小時後,我刪除了他們的帳戶和信息。

1

你所關心的實際上叫做Cross Site Request Forgery或XSRF。你可以在OWASP Website上閱讀更多關於它的內容。

幾件事情,你應該做的解決這個問題 -

  1. 使用POST進行刪除操作。這並不能保護您免受XSRF的侵害,但可以保護您免受鏈接追隨者/頁面加速器的侵害。它也是http最佳實踐。
  2. 將您的會話標識符發佈在請求的正文中。在服務器端,比較來自cookie和來自請求的會話標識符 - 如果它們不同,則拒絕該請求。這是防止XSRF的「double submit cookie」方法。
  3. 或者,您可以要求用戶解決驗證碼。

此外,湯姆提到的「軟刪除」也是一個好主意。

1

這聽起來像添加一些其他信息的功能是答案。這裏是有問題的功能:

function delete() { 
     $id = $this->session->userdata('user_id'); 
     $this->auth->delete_user($id); 
     redirect('home'); 
    } 

在代碼點火器這可以通過訪問site.com/class/delete這是我的問題訪問。我認爲一個好的計劃將發佈一個認證令牌與刪除按鈕(保存在cookie中),所以也無法通過URL採取行動:

function delete() { 
     if($this->input->post("token") == $this->session->userdata('token')) { 
      $id = $this->session->userdata('user_id'); 
      $this->auth->delete_user($id); 
     } 
     redirect('home'); 
    } 

我不認爲我需要一個軟現在刪除,但謝謝你的提示!如果你看到任何其他問題請解釋,謝謝。