2013-08-29 152 views
2

我討厭做另一個cookie問題。我現在讀了很多,它讓我感到困惑。COOKIE/PHP:安全登錄REAL

我在YouTube和其他網站上看到很多自稱專業人士的操作指南和教程。但我無法弄清楚這一點。所以我必須要求其他人的意見。 Okey,cookies很難保證安全。但是你可以做幾件事,對吧?

在許多教程中,PHP程序員選擇在cookie中存儲用戶名和密碼。我能理解的是一件很愚蠢的事情呢?特別是如果您將此用作網站上的身份驗證。只需詢問cookie是否存在而不檢查數據庫。但是這還不夠好。如果有人用另一個用戶名編輯cookie。 BAM,完全訪問該帳戶。

所以,我一直在想。創建並存儲一個令牌作爲Cookie是一種好方法嗎?當用戶使用此Cookie標記訪問網站時。該網站詢問數據庫:「你們哪一個失敗者擁有這個?」。如果這是一場比賽而且你進場了。當然這個令牌是不可預測的!我的意思是對於人類的思想。對於暴力攻擊來說很難。

看看此令牌:

$salt = 'S0M3TH1N6'; 

$identifier = md5($salt . md5($username . $salt)); 
$token = md5(uniqid(rand(), TRUE)); 
$timeout = time() + 60 * 60 * 24 * 7; 

setcookie('auth', "$identifier:$token", $timeout); 

這個Cookie訪問,網站調用數據庫,看用戶是否有此作爲標記。如果沒有命中,你會回到登錄頁面。如果遇到問題,您可以在會話中取回並存儲所需的其他所有內容。據我所知,會話更可信,因爲它們在服務器端。因此,不要在cookie中存儲用戶名和密碼。因爲cookie在客戶端。當然,使用mysql_real_escape_string();在您獲取或添加到數據庫的所有內容上。

你們有什麼想法呢?也許我錯過了什麼,或者很多。隨意發表評論。 :)

在此先感謝。

+0

這可能有助於http://stackoverflow.com/a/244907/1497042 – aarryy

+0

HTTP:/ /jaspan.com/improved_persistent_login_cookie_best_practice < - 您只需要知道 – PeeHaa

+0

爲什麼不使用會話如果您要做的只是創建一個包含會話ID的cookie? – Think

回答

1

您應該只使用一個會話。

在日誌中的身份驗證設置會話:

session_start(); 
//login succesful?? then: 
$_session['user'] = array('fname'=>$query['fname'], 'lname'=>$query['lname']...; 

然後在每一頁上:

session_start(); 
    session_regenerate_id(); 

    if ($_SESSION['user']){ 
     echo '<pre>'; 
     echo $_SESSION['user'] 
     echo '</pre>'; 
    } 
+2

我認爲他正在尋找的是一個持久登錄解決方案,無論如何都需要cookie。但我可能是錯的。 – aarryy

+0

我想使用一個cookie,因爲它應該像「記住我」功能一樣工作。 – Treps