許多可能的方法之一可能是:
注:我已經在Pure PHP中進行了編碼。但是所有語言的邏輯都是一樣的。
- set $ redirect = FALSE。
- $ _GET [「logout」]是否設置?如果是,則轉到3,否則轉到5
- 如果設置,刪除,授權,rem_me cookies,銷燬會話。
- 顯示登錄表單並退出。
- 這是一條供應信息嗎?如果是,則轉到6,否則轉到18
- 設置$ redirect = TRUE。
- 是用戶名&密碼嗎?如果是,則轉到8,否則轉到3
- 獲取$ username,$ pass-hash & $ db中的rem-me-hash。
- 是$ username & $密碼與DB中相同嗎?如果是,則轉到10,否則轉到步驟3
- 設置cookie [「username」] =已清理($ _ POST [「username」])
- 發出一個包含$ auth = sha1的cookie [「auth」] .password.time.6random_letters)。
- 設置會話[「auth」] = sha1($ auth)。取消設置$ auth。
- 是否記得我選擇的選項?如果是,進入13,否則轉到15
- 設置$ REM = SHA1
- 設置cookie的[ 「REM」] = $ REM
($隨機$ user_string。$時間$密碼。$的用戶名。)
- Set $ rem = 0
- 如果$ rem!= $ rem-me-hash_DB,請在數據庫中插入$ rem。轉到23
- 是否設置了$ rem cookie?是去19,否則去20
- 是$ rem cookie == $ rem-hash-in-db?如果是,轉到22,否則轉到3
- 是$ username-cookie & & $ auth-cookie & & auth-SESSION set?如果是,則轉到21,否則轉到3
- 是sha1($ auth-cookie)=== $ _SESSION [「auth」]?如果是,則轉到22,否則轉到3
- 是$ redirect == TRUE?如果是,則使用301,GET方法重定向到同一頁面。否則去23
- 這是我的超級祕密星際迷航壁紙(內容)。
一個漫長的過程,但(希望)涵蓋所有情況。
將所有此算法保存在password.php
中,並且在要保護的每個文件的頂部包含此文件。對祕密內容的控制只有在經歷了所有可能的情況後纔會出現。在每一次故障中,腳本都將顯示登錄表格&退出。
而且它實現了郵政重定向消息獲取(Wikipedia)的方式,你在哪裏得到一個POST請求,處理它,並用GET方法將用戶重定向回,以防止返回&雙表單提交刷新按鈕按下..
上述說明中可能存在拼寫錯誤或混合概念。讓我知道任何改進。
好吧,我想看看你在說什麼。所以我創建一個GUID並將用戶存儲在客戶端Cookie中。當他/她登錄(自動)我匹配數據庫,如果我的SQL表中有一行,例如user_auth_guds,其中的GUID鍵匹配,我登錄用戶?如果他們註銷,我只是刪除他們的客戶端cookie? – Baconbeastnz 2012-08-11 08:28:13
@Baconbeastnz - 聽起來很正確。這是關於暴露敏感信息。當用戶註銷/忘記密碼時,我還會清除數據庫中的標記值,因此如果被捕獲,則不能重新使用它。 – Oded 2012-08-11 08:30:04
謝謝你,先生,謝謝你,讚美你的家人:) – Baconbeastnz 2012-08-11 10:37:43