通过Web服务处理密码的最佳实践

时间:2010-09-16 08:36:27

标签: c# java passwords

我有N层申请,由三部分组成:

1. Client (WPF)
2. WebService (Java web service) (Business logic)
3. Database (Oracle)

我将密码存储在oracle数据库的md5中,但是将密码从客户端发送到非加密状态的Web服务,就像一个简单的字符串一样。我必须使用哪种技术来保护网络密码?

4 个答案:

答案 0 :(得分:1)

我真的建议使用SSL,除非你想解决很多安全问题。 Kerberos也很好地解决了这些问题,但使用它并不是那么简单。

我通过阅读Designing an Authentication System: a Dialogue in Four Scenes获得了有关安全身份验证问题的一些见解(它是关于设计Kerberos的,但一般来说很多适用于所有身份验证系统)。

答案 1 :(得分:1)

我认为SSL是其他人建议的朋友。但无论你做什么,我都不会通过网络发送MD5哈希值。哈希(使用MD5或其他)的部分原因是为了避免存储可以“用于”对用户进行身份验证的值。如果任何攻击者可以访问数据库,他只能看到哈希密码,但仍然需要使用原始密码 - 他无法从哈希中解密 - 来访问Web服务。如果您的Web服务不是要求原始pwd并在将其与存储在DB中的值进行比较之前对其进行哈希处理,而是决定让客户端进行哈希处理,则上述攻击者只需要发送受感染的哈希进行身份验证。

答案 2 :(得分:0)

如果您担心被拦截的请求,那么您可以使用SSL在客户端和WS之间进行通信。即使您在将客户端内部的真实密码发送到Web服务之前对其进行编码,如果编码的表单以某种方式被公开,它也可以“按原样”用于从任何HTTP客户端向Web服务表达请求。或者,您可以使用仅存储在客户端中的算法来加密消息内容本身,这样您就可以确保所有WS请求都来自您的客户端。

答案 3 :(得分:0)

您可以将密码MD5从客户端发送到Web服务。更好的是,盐渍MD5(在DB中你应该保持盐腌MD5)。然后只比较从客户端收到的内容与DB中的内容。