php
  • sql
  • security
  • 2013-08-25 24 views 0 likes 
    0

    我的代碼:會話ID的md5(時間())

    if ($usernamelogin == $dbusername && $passwordlogin == $dbpassword) 
    { 
        $hash = md5(time()); 
        mysqli_query($connection, "UPDATE users SET sessionid='$hash' WHERE username='$usernamelogin' AND password='$passwordlogin'"); 
        $_SESSION['id'] = $hash; 
        $_SESSION['un'] = $usernamelogin; 
    } 
    else 
    { 
        echo ('Wrong username or password.'); 
    } 
    

    然後我使用$會話ID,在SQL會話ID和用戶名,以驗證用戶是否是真實的。這意味着,假設我有防SQL注入的保護,安全風險相對較少,對吧?

    我來這裏問,因爲這看起來像一個過於簡單的解決方案,一個複雜的問題。我去過的所有文件和網站都實施了更復雜,更易混淆,並且有時不安全的方法來驗證用戶是否已登錄。

    這是安全嗎?

    +4

    請告訴我你沒有在數據庫中以純文本存儲密碼?如果你那麼**沒有**你不安全。另外,如果您不使用SSL,會話可以被攔截。即使你是,許多「最佳實踐」指南建議經常更新會話ID(5-10分鐘)。最後,爲什麼選擇一個可預測的會話ID?如果有人可以粗略地猜測會話何時被創建,他們可以猜出該id(以小範圍)。使用GUID/UUID – Basic

    +0

    我還沒有切換,但沒有我不會以純文本格式存儲它們。我仍處於開發階段。 –

    +1

    哦,你也容易受到SQL注入的影響。嘗試輸入密碼「pass」; DROP TABLE用戶 - '(好吧,不要但你明白了)。 – Basic

    回答

    1

    您不應該使用md5(time())來生成會話ID,這是不安全的。時間是班輪的,可以猜測,例如有些網站會顯示用戶何時進入,您可以使用這些信息和蠻力來劫持他的會話ID。

    第二件事,你也可以在隨機時間蠻橫的,而且很有可能你會得到一些隨機的用戶會話ID。另外,如果兩個用戶同時登錄,則兩個用戶擁有相同的第二個事件的可能性很大。

    看看這個偉大的演講(DEFCON 18: How I Met Your Girlfriend 1/3),我看了很長一段時間,我不記得細節,但我記得演講者提出了關於會議弱點的系列觀點。另請參閱OWASP wiki,它在Web安全性和會話安全性方面擁有豐富的資源。

    +0

    這將通過用戶名檢查來解決(他們不會有相同的會話ID和用戶名,所以沒有問題),但如果你檢查OP的評論,我不再使用MD5(時間()) 無論如何。我會觀看視頻,我已經在看OWASP wiki。謝謝。 –

    +0

    @JamesG。會話ID的重點在於它是客戶需要知道的唯一事情......否則,如何阻止我修改Cookie /您在瀏覽器中存儲的任何內容以假裝成其他人?你不能相信客戶提供的_anything_。會議ids _必須是唯一的,不可猜測的 – Basic

    2

    請不要採取這種錯誤的方式,但如果你不明白SSL,你不應該處理金錢。

    SSL用於加密瀏覽器和服務器之間的通信。沒有它,瀏覽器和服務器之間的網絡,任何人都可以看到以明文形式發送的每一個請求/響應 - (?)密碼,帳戶ID,信用卡號碼等

    這是http://地址和https://之間的區別地址。它需要服務器和代碼更改

    服務器需要來自可信機構的證書來啓用SSL(以及一些配置更改),但這還不夠。你還需要確保你的代碼只處理問題secure cookies - that is, cookies that can't be sent over http,在服務器配置錯誤等情況下,檢查傳入請求是否啓用了SSL。這是一個巨大的話題,我無法在一個答案中告訴你足夠的答案你安全。

    作爲絕對最低限度,您的代碼應該對所有OWASP Top 10 vulnerabilities安全。這是使任何網站安全的絕對面包和黃油的東西。您還需要閱讀SSL/TLS and encryption in general。這將給你一個握手/消息如何來回傳遞的概述。

    +0

    我同意,除非我知道它是100%安全的,否則該網站將不會處於活動狀態。該網站不在線,仍在開發中。我想確保在任何事情公開之前我完全理解安全。謝謝。 –

    相關問題