2013-02-11 33 views
0

我已經使用編碼了移動api Node.js,RedisMongoDB。但是現在我正在尋找具體的方法來提供我們系統的安全性。奧古斯特科克霍夫臭名昭着的原則激發了我的問題;移動API安全範例

「它不能被要求是祕密,它必須能夠落入敵人的手中,而不不便」

檢查這個原則我弄清楚,有沒有安全的辦法後在嗅探器捕獲整個數據包後保護數據安全。當然也有替代方式像使用API密鑰,使用加密算法MD5&MD6三重DESSHA1等。但是這如果整個數據包被捕獲也不會工作。並且有像HTTPS,SSL證書這樣的安全預防標準。但是,如果有人才能夠捕獲數據包,則它可以像我們系統中的已驗證用戶一樣行事。

如何應用安全方法,即使捕獲整個數據包,系統也能夠區分來自外部源的請求,而不是來自我們驗證的用戶的請求。

PS:我認爲應用具有時間戳的自定義加密算法以防止此問題可能有點混亂。

+0

HTTPS有什麼問題?通過適當驗證的HTTPS,沒有中間人。 – 2013-02-11 14:44:15

回答

1

根據Kerckhoffs的原則「即使系統中的所有內容除了密鑰都是公共知識,密碼系統也應該是安全的。」所以密碼系統的工作方式是,密鑰是唯一可以用來破譯系統的東西。如果鑰匙落到敵人那麼它全部結束。

在實踐中,當您通過互聯網進行通信或嘗試使用密碼驗證您的電子郵件帳戶時。您的密碼是 從未發送到服務器,也不以純文本格式存儲在服務器上。如果你這樣做, 它不安全。最好的安全措施是不要存儲密碼 (甚至不加密),而是存儲加密密碼 的鹽漬散列。

這是一個用戶的一個散列。這是一種方法,你無法取回用戶信息,只需測試它是否在數據庫中。現在,即使敵人控制了數據庫,也無法訪問您的用戶名/密碼。

現在要說明的是,通信信道中傳輸的信息並不重要,因爲通信信道是敵人!它可供其他用戶使用,任何人都可以嗅探它。就像敵人在收音機上互相掃描一樣。

通過通道發送的哈希可以被嗅探並用於身份驗證。誠然,服務器可以使用HTTPS連接來區分欺騙嘗試和實際嘗試。服務器跟蹤HTTPS會話,並會要求重新驗證,如果這樣的事情發生。 HTTPS阻止使用嗅探數據/ MITM攻擊。即使嗅探器獲得散列(臨時票證),他也不能做任何惡意的,用戶名和密碼不能被破解。

感謝Kerckhoff,我們的密碼是安全的。

如何在node.js上實現它?尋找passport.js包。它實現了當前的標準OpenAuth。