【发布时间】:2014-06-02 07:28:46
【问题描述】:
我有一个 WebService,它有几个只对站点成员可用的调用。我想构建一个纯 html/jQuery 移动应用程序,它可以调用此服务发出请求和下载信息。
我最初的计划是将用户的用户名和密码放在 auth 标头中,但我担心将它们暴露给任何流量嗅探器。我显然可以创建一个会话密钥,因此在初始身份验证后他们使用令牌调用,但这可能容易受到会话窃取。
我目前的计划是:
- 实现登录调用,这将返回一个令牌,该令牌将在指定时间后过期
- JS 使用此令牌调用(从而减少发送密码的次数)。
- 用户拨打电话
- 将令牌与用户的 IP 地址进行比较。
- 用户注销,这将结束会话并提前移除密钥以降低风险
另一个想法是在我发送密码时对其进行加密。基于 .NET RSACryptoServiceProvider 实现在 JS 中进行公钥/私钥加密是否可能/明智?
处理身份验证的最佳方法是什么,最好不要购买 SSL 证书(数据本身并不是特别敏感)。 ?
【问题讨论】:
-
如果你真的想防止所有中间人攻击(强烈推荐,因为它是一个移动应用程序),你真的应该使用 SSL .您应该保护连接的传输层。
-
@Liath 虽然散列是一个很好的方法,但使用 SSL 仍然更好 - 正如我所说,它保护了整个传输层,不仅登录/密码/会话密钥,而且您的所有网络服务连接。
-
@Liath 发表了答案,希望对您有所帮助;)
-
SSL 是解决此问题的唯一解决方案。使用客户端加密,您必须向客户端(以及介于两者之间的任何人)公开您的密钥、盐和加密算法,这使得在网络上解密您的数据变得非常简单,从而使加密无用。
-
强烈同意@Liam:您的问题基本上是“既然我已经排除了解决我问题的唯一实际解决方案,我该如何解决我的问题?”你不能,所以我什至不会费心浪费你的时间。要么数据足够敏感以保证适当的安全预防措施,要么在这种情况下,当您可以添加其他功能(或在吊床上打盹)时,不要花费您自己的宝贵时间来伪造系统安全。跨度>