我有一個應用程序在本地運行並訪問應用程序,用戶必須使用用戶名和密碼登錄。在登錄時,提供的密碼被散列並與退出的散列密碼進行比較。如何防止用戶通過更新其他用戶的密碼來模仿其他用戶?
應用程序使用數據庫並將用戶憑證存儲在用戶表中。 users表中有用於存儲用戶ID,用戶名和單向散列密碼的列。
應用程序在用戶創建時散列用戶密碼或由用戶更改密碼。 哈希值爲具有相同密碼的兩個用戶返回不同的哈希值。散列密碼與用於散列密碼的迭代次數(隨機生成)一起存儲在表中。示例:2CF7C.ABLK/hrjy ... zCOI5A =
我發現的一個弱點是,如果數據庫被現有用戶破解,該用戶可以用他們自己的密碼更新另一個用戶的密碼。然後惡意用戶可以使用受感染用戶的憑據來訪問該應用程序。
爲了緩解這個弱點,我打算散列用戶標識,用戶名或兩者並將它們與密碼一起存儲。在登錄時,檢查散列用戶標識和密碼,如果它們不匹配,則登錄失敗。
有沒有更好的選擇如何處理這個弱點?
一旦數據庫損壞,您不能再依賴用戶數據,因爲它可能已被更改 - 添加更多步驟(例如,將用戶ID添加爲哈希鹽)並不會使攻擊者更難(他/她可以在同一塊數據上覆制所有可以使用的內容)。 – zwer