2011-01-26 75 views
0

這是我學習/理解安全(ish)發送發佈數據的冒險嘗試。建設性的批評歡迎。嘗試使用PHP安全發送發佈數據的缺陷

這只是理論,沒有太多的代碼。另外,我在示例中使用了PHP的SHA1(),只是因爲我已經花時間瞭解它的內部。我知道其他(更好?)算法(例如:MD5()),所以換掉你最喜歡的。

1)服務器生成一個隨機salt rand(min,max),根據請求將其與頁面一起發送,計算並將SHA1(un:pw:salt)與請求的服務器時間戳一起存儲到數據庫)

1)注意:鹽是sniffable,所以假設黑客知道鹽(可你非SHA1()的東西,拿到SHA1'd數據輸出)

2)用戶輸入用戶名和密碼,點擊?提交

3)提交一個JavaScript函數(打包模糊處理,是的,我知道,這不會增加真正的安全性)SHA1(un:pw:salt),然後只發布結果向服務器

3A)注意:加密憑證是sniffable所接收的憑證,因爲匹配它所存儲在數據庫中,和一個時間範圍內到達 (5分鐘左右)

4)服務器檢查初始請求。允許/拒絕決定。

還要求改變鹽,所以即使有人嗅到了加密的數據,這將是一個 )用戶進行新的頁面請求 B)的時間內到期

思考後沒用?

編輯:另外,假設所有的帶狀標籤/ SQL黑客/ <>等...注射處理適當。

+2

只有真正的安全性是使用https,我認爲 – armonge 2011-01-26 22:40:00

+0

是的,除了這個當然。好點子。 – jason 2011-01-26 22:52:01

+2

你不能「解開」某些東西來獲取密碼。這是一個不可逆的哈希函數,所以你必須暴力破解哈希。 (哦,並且md5被認爲安全性較差)。 – staticsan 2011-01-26 23:04:22

回答

3

使用https並繼續下一個問題!

1

這就是「摘要」身份驗證對HTTP的工作原理。

如果你有興趣學習,read more about the Digest Authentication method.

摘要式身份驗證會阻止一個人在這方面的中間人從學習用戶的密碼。但是,它也容易受到嗅探器可以改變流量的攻擊。主動攻擊者可以讓用戶提供憑證,但可以根據需要修改請求的主體。

另外,正如您所描述的,服務器存儲用戶的密碼。這不好。基於密碼的身份驗證應該只能從密碼中存儲導致的不可逆轉的

我建議您使用SSL並學習如何散列服務器端存儲的密碼。