2013-02-11 61 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。