2017-05-26 75 views
0

我有一個應用程序在本地運行並訪問應用程序,用戶必須使用用戶名和密碼登錄。在登錄時,提供的密碼被散列並與退出的散列密碼進行比較。如何防止用戶通過更新其他用戶的密碼來模仿其他用戶?

應用程序使用數據庫並將用戶憑證存儲在用戶表中。 users表中有用於存儲用戶ID,用戶名和單向散列密碼的列​​。

應用程序在用戶創建時散列用戶密碼或由用戶更改密碼。 哈希值爲具有相同密碼的兩個用戶返回不同的哈希值。散列密碼與用於散列密碼的迭代次數(隨機生成)一起存儲在表中。示例:2CF7C.ABLK/hrjy ... zCOI5A =

我發現的一個弱點是,如果數據庫被現有用戶破解,該用戶可以用他們自己的密碼更新另一個用戶的密碼。然後惡意用戶可以使用受感染用戶的憑據來訪問該應用程序。

爲了緩解這個弱點,我打算散列用戶標識,用戶名或兩者並將它們與密碼一起存儲。在登錄時,檢查散列用戶標識和密碼,如果它們不匹配,則登錄失敗。

有沒有更好的選擇如何處理這個弱點?

+1

一旦數據庫損壞,您不能再依賴用戶數據,因爲它可能已被更改 - 添加更多步驟(例如,將用戶ID添加爲哈希鹽)並不會使攻擊者更難(他/她可以在同一塊數據上覆制所有可以使用的內容)。 – zwer

回答

1

那麼如果攻擊者有權訪問數據庫,並且用自己的密碼替換了某個用戶A的密碼,那麼攻擊者就可以使用自己的密碼以用戶A的身份登錄。

爲避免出現此類問題,您應該保護您的應用程序免受SQL注入攻擊。這將減少您的數據庫受到攻擊的可能性。

您可以採取的另一項預防措施是在您的網站上使用多重身份驗證。 https://en.wikipedia.org/wiki/Multi-factor_authentication。即使用戶能夠危及您的數據庫並更新其他用戶的密碼,他仍然必須通過其他認證方案。

相關問題