向服务器发送密码

Posted

技术标签:

【中文标题】向服务器发送密码【英文标题】:Sending password to server 【发布时间】:2012-10-04 21:09:57 【问题描述】:

我在问自己。将个人信息从 ios 设备发送到服务器的最佳方式是什么。

此时我加密了应用程序中的密码(sha1 salt password pepper),然后我使用从 iOS 向服务器发送发布数据。

保护用户和抵御任何 MITM 攻击的最佳方法是什么。我的方式够安全吗?

更新:

我添加了 SSL 证书。为了确保用户只需在我存储用户注册时生成的密钥后登录。我在用户第一次登录时获取它们。与用户名和用户 ID 结合使用。这是一个好方法吗?只有越狱用户才能阅读,有风险。

【问题讨论】:

@CodesInChaos 这是个笑话吧? @Woot4Moo 为什么?这是标准做法,当然比您可能构建的任何自制方案都要好。请务必使用适当的证书验证(例如对指纹进行硬编码)。 @CodesInChaos 你说用纯文本发送,我没有评论 TLS 的使用(据我所知是正确的) @Woot4Moo 我的意思是,除了 TLS 已经提供的加密之外,您不需要做任何事情。没有客户端散列或类似的幻想。 【参考方案1】:

在客户端对密码进行哈希处理有助于防止密码本身在窃听中被检测到,但它本身并没有提供任何安全性,因为凭据随后成为密码的哈希版本,而不是原始密码密码本身。窃听者可以只获取散列版本,然后自己发送散列。

到目前为止,最简单的解决方案是简单地使用 SSL/TLS。由于您提到了“post”,这意味着您可能正在使用 HTTP。相反,您可以通过 HTTPS 连接并发布数据,就像您已经在做的一样。只要检查了证书的有效性(我相信 iOS 框架已经默认这样做了),那么连接应该在很大程度上是安全的。

对于大多数情况,这应该足够好了。您可以使用一些更复杂和复杂的技术来进一步强化,但 SSL/TLS 本身就可以完成大量工作。

【讨论】:

错误,客户端散列(攻击者所在的位置)至少不安全。 通过网络发送密码纯文本也不是什么好事。我将其编辑为客户端散列和服务器端散列 @Woot4Moo 如果您正在尝试设计一个系统以抵御控制客户端设备的攻击者,那么即使 TLS 也无法帮助您,除了通过默默无闻的一点安全性(他们仍然可以提取/在内存中加密之前修改他们想要的任何数据)。客户端散列提供了非常少量的安全性(虽然不是针对帐户!),并且远不如使用 TLS 来保护连接。 SSL/TLS 是一个明显正确的选择。除此之外,您还需要对安全性有很好的了解,否则您不太可能改进。 @Kitsune 听起来您对安全性有根本的误解。我这么说是因为您说的是散列而不是加密,但您明确地调用了 TLS。我建议您听取自己的建议,不要为安全相关问题提供不完整的解决方案。但是,我可能是错的,您可能是一些安全专家,他们的博士论文是关于防止 MITM 攻击。 @Woot4Moo 我在哪里说要散列而不是加密?我指出了为什么客户端哈希对窃听者劫持帐户的能力没有任何作用,而且 SSL/TLS 是保护通信安全的简单方法,并且对于大多数情况足够好。跨度>

以上是关于向服务器发送密码的主要内容,如果未能解决你的问题,请参考以下文章

向 Windows 服务发送密码

怎么拦截自己本机向服务器发送的数据?

是O.K向客户端发送密码哈希?

如何在ios中使用ASIHTTPRequest向服务器发送和检索用户名和密码以及图像

使用HttpsURLConnection时如何覆盖Android发送给服务器的密码列表?

如何在没有身份验证的情况下直接向 SMTP 服务器发送邮件?