0

我已经使用Node.js、RedisMongoDB编写了移动 API 。但是现在我正在寻找一种在我们的系统中提供安全性的具体方法。这个问题是我从奥古斯特·科克霍夫臭名昭著的原则中得到启发的;

“绝不能要求保密,而且要能够落入敌人手中而不会造成不便”

在检查了这个原理之后,我发现在嗅探器捕获整个数据包之后没有安全的方法来保护数据。当然还有其他方法,例如使用API 密钥、使用MD5 和 MD6Triple DESSHA1加密算法。但是,如果捕获了整个数据包,这也将不起作用。并且有HTTPS、SSL证书等安全防范标准。但是,如果有才华的人再次捕获数据包,它就可以像我们系统中的经过验证的用户一样行事。

如何应用一种安全方法,即使捕获了整个数据包,系统也能够区分来自外部来源而不是我们经过验证的用户的请求。

PS:我认为应用带有时间戳的自定义加密算法来防止这个问题可能有点混乱。

4

1 回答 1

1

根据 Kerckhoffs 的原则“密码系统应该是安全的,即使系统的所有内容,除了密钥,都是公共知识。” 所以密码系统的工作方式是密钥是唯一可以用来破译系统的东西。如果钥匙落到敌人手中,那么一切都结束了。

实际上,当您通过 Internet 通信或尝试使用密码验证您的电子邮件帐户时。您的密码永远不会以纯文本形式发送到服务器,也不会存储在服务器上。如果你这样做,它不安全。最佳安全实践是根本不存储密码(甚至不加密),而是存储加密密码的加盐哈希。

这是一个用户的一个哈希值。这是一种方式,您无法取回用户信息,只需测试它是否在数据库中。现在即使敌人控制了数据库,它也无法访问您的用户名/密码。

言归正传,不管你在通讯通道中传输什么,因为通讯通道是敌人!!!它可供其他用户使用,任何人都可以嗅探它。就像敌人在无线电中互相扫描一样。

通过通道发送的哈希可以被嗅探并用于身份验证。是的,但服务器可以使用 HTTPS 连接区分欺骗尝试和实际尝试。服务器跟踪 HTTPS 会话,如果发生这种情况会要求重新验证。HTTPS 阻止使用嗅探数据/MITM 攻击。即使sniffer拿到hash(临时票),他也不能做任何恶意的事情,用户名和密码也无法破解。

感谢 Kerckhoff,我们的密码是安全的。

如何在 node.js 上实现它?寻找 passport.js 包。它实现了当前的标准 OpenAuth。

于 2013-02-11T16:59:53.267 回答