【发布时间】:2012-03-05 14:36:29
【问题描述】:
我正在开发网络服务。用户将能够使用不同 asp.net 项目上的表单创建用户帐户。因此,当用户输入密码信息时,我需要将加密信息存储在数据库中。但是现在,当用户通过 Web 服务发送用户凭据时,出于安全目的,我需要用户发送加密的密码。
现在我们如何才能拥有相同的 ecrption 程序,以便我能够验证请求。
【问题讨论】:
标签: c# web-services security
我正在开发网络服务。用户将能够使用不同 asp.net 项目上的表单创建用户帐户。因此,当用户输入密码信息时,我需要将加密信息存储在数据库中。但是现在,当用户通过 Web 服务发送用户凭据时,出于安全目的,我需要用户发送加密的密码。
现在我们如何才能拥有相同的 ecrption 程序,以便我能够验证请求。
【问题讨论】:
标签: c# web-services security
您想要的是使用 HTTPS 连接将密码从用户安全地传输到服务器。这是关于如何使用 IIS 为 HTTPS 设置开发环境的说明 - scottgu link。
HTTPS 协议将处理加密和解密,您只需在服务器端处理纯文本密码。
之后,在服务器端,您计算密码的哈希值并将其与存储在数据库中的哈希值进行比较。为此可以使用标准的 ASP.NET SQL 成员资格提供程序。
Jeff Atwood 对存储和散列密码背后的问题进行了很好的解释 - coding horror link。
【讨论】:
如果用户的浏览器以任何方式知道如何加密您的密码,那么您就会失去意义,聪明的黑客可能会提取该加密。
使用 SSL 将信息直接传递给您的应用程序本质上就是按照您的要求进行操作,并且是公认的安全接收密码的方式。您只需检查数据库中的加密版本即可。
您的应用收到原始密码(浏览器和服务器已完成加密/解密),然后您的应用对其进行加密并在数据库中查找匹配项。
使用 Web 服务完成此操作的另一种方法是使用单个登录步骤,该步骤返回一个过期令牌,用于进一步通信。 OAuth 是最流行的,所以在谷歌上搜索一下。
【讨论】:
你可以使用System.Security.Cryptography;加密你需要的信息
请看下面:
http://jakkaj.wordpress.com/2007/10/27/encrypting-and-securing-web-service-traffic-without-ssl/
请记住,您为提供“加密”而不使用 SSL/TLS 所做的任何事情都可能容易受到攻击
【讨论】: