2009-11-16 75 views
5

我經常使用標準表單通過HTTP POST方法發送登錄信息,然後使用php驗證其是否正確。我對密碼(有時用戶名)使用md5散列來提供某種程度的安全性,所以我沒有在我的代碼中存儲原始密碼,以防未經授權的人查看,或者類似的東西。使用HTTP POST登錄表單

我敢肯定,我只是做任何安全呻吟的甚至是模糊的認識或惱怒至少嘆息。

我最近一直在論壇上有一個MySQL數據庫的用戶和密碼,密碼存儲爲MD5散列,但我擔心,當通過HTTP POST發送登錄表單時,信息被攔截的可能性在那兒。我意識到MySQL注入攻擊的可能性,並認爲我可以安全地避免任何簡單的攻擊。

我不是一個安全專家,當談到這個有點東西,但我想限制密碼的可能性時,通過HTTP發送被截獲。

這不是一個很大的網站,所以我並不過分擔心攻擊,HTTPS並不是一種可能性,所以我在尋找關於使用此方法發送登錄信息時應遵循的標準實踐的建議。

乾杯

回答

5

你需要做的基於服務器提供的挑戰鹽密碼的客戶端的哈希值。每個請求的這個挑戰應該是不同的。

這樣一來,即使密碼哈希被攔截,它不會對任何有用的東西可用,因爲在下一次的認證將需要不同的哈希值。

無論如何,HTTPS應該是正確和安全的方式。

+0

什麼是最好的哈希(如果這甚至是一個術語)使用PHP來做到這一點?在發送之前散列輸入的最佳方法是什麼? 我假設,雖然可能是錯誤的,我希望使用JavaScript採取用戶輸入並在提交表單之前對其進行哈希處理,但如果關閉javascript,則不起作用。 – andyface 2009-11-16 11:10:26

+0

我通常堅持標準算法,兼顧安全性和兼容性。 PHP有一個sha1()函數,適用於大多數用途。你顯然需要一些客戶端代碼來做到這一點,無論是JavaScript,一個小程序,一個瀏覽器插件等。我會去JS。您始終可以提供不太安全,無腳本的登錄表單。 – Patonza 2009-11-16 12:04:30

+0

https不會被緩存,是嗎?我不認爲你需要它爲一些小論壇... – 2011-02-17 21:53:10

0

一個基本的建議是:不要相信任何人。

所以,測試SQL注入您發佈的數據,中的JavaScript功能的文本字段,避免存儲在數據庫中平原的密碼。

+0

「不相信任何人」。 - 我永遠不會:D 感謝您的提示。 – andyface 2009-11-16 11:11:05

0

您應該爲所有類型的登錄實施HTTPS,無論是否散列。

如果密碼被散列但通過HTTP傳輸,任何人都可以竊取散列並自行發佈。您的解決方案除了模糊真實密碼外,不提供真正的安全性。

如果HTTPS實施和證書頒發機構對您而言存在問題,則您始終可以使用自簽名證書。