簡體   English   中英

這個登錄會安全嗎?

[英]Will this login be secure?

嗨,這是我第一次這樣做。 我已經閱讀了基於表單的網站身份驗證的權威指南http://en.wikibooks.org/wiki/PHP_Programming/User_login_systems ,但我仍然懷疑我是否正確地這樣做了。 注意:我這樣做是為了學習,所以請不要建議一個框架和php pear auth或任何其他相關的類。 我只是想要一些指導我可以做些什么來改善這一點。

我不需要CIA風格的安全性,只需要登錄網站的基本內容:

無論如何,這是我的登錄工作方式:

  1. 等待用戶按下登錄

    if(isset($ _ POST ['action'])&& $ _POST ['action'] =='Login')

  2. 表單令牌匹配令牌存儲在會話中嗎? 如果不死

  3. 使用php過濾器驗證用戶名和密碼中的字符串
  4. 哈希密碼(sha256)(含鹽,我為每個密碼使用相同的鹽)
  5. 使用mysqli檢查用戶名和散列密碼(SQL中為LIMIT 1)。
  6. 如果未找到匹配項則顯示錯誤 - 否則設置會話(使用sha256進行哈希處理)

在所有這些的底部我放置以下內容,這是我最擔心的一行:我的想法是,如果未設置會話,則顯示登錄表單並退出。

 if
 (!isset($_SESSION['authenticated'])) {
     require_once 'html/login_form.html';  
     exit();   }
 // secret stuff goes here

完整的代碼可以在這里找到 它仍然不完整

我還將嘗試實現這一點: 如何限制PHP中的用戶登錄嘗試

我很感激任何反饋。

這是一個非常開放的問題,因為有很多領域需要分開。 但是,對於平均安全性,我至少建議更改以下內容。

2號:不要使用相同的鹽。 這意味着如果鹽被泄露,那么所有的散列值都是如此。 我建議用一種方法來加密密碼。 用戶寧願重置它,也不要知道它可以被合理地解密。

5號:不要忘記SQL注入。 遠比LIMIT 1重要。 看看mysql_real_escape_string()

首先,沒有什么是100%安全的。 為了使您的登錄更安全,您可以添加以下一些內容:

  1. 挑戰響應 - http://en.wikipedia.org/wiki/Challenge-response_authentication
  2. 三通協議 - http://en.wikipedia.org/wiki/Three-pass_protocol
  3. 哈希用戶名和密碼md5(password + salt + username)的組合md5(password + salt + username)
  4. 使用JavaScript在客戶端上驗證,然后在服務器上再次驗證
  5. 使用數據庫抽象庫來防止SQL注入。

還有更多,但這一切都取決於您需要它的安全性以及您希望讓用戶通過多少麻煩。 根據您的應用需要某種平衡。

我的經紀帳戶在使用登錄表單之前使用圖片和挑戰。 這是一種痛苦(需要經紀人賬戶),但在博客上可能不是那么多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM