9

我需要在我们的配置数据库中存储一个第 3 方密码,以便用户可以将他们的登录信息保存到可以通过我们的服务器访问的 Web 服务。

我需要将密码传递给 Web 服务,所以我不能只是散列密码并存储散列。我需要能够获得发送到服务的实际密码。

出于安全原因,我想加密我们存储在数据库中的密码。我查找的有关加密密码的所有内容似乎都在说“散列,不要加密!” 但我认为这不适用于这种情况。

我想知道是否最好在 VB.NET 代码中处理加密/解密或使用 SQL Server 来完成它(从我在这里看到的,至少可以在 SQL 中完成,但我不确定是否那样有道理。我需要更多地研究以找出部署问题会是什么样子)。

4

2 回答 2

1

我同意乔治·斯托克的观点。如果您可以使用现有的协议 - 使用它(它将减少十倍的可能问题和安全漏洞)。

以防万一,如果您没有选择(不能使用任何协议)。如果您仅在用户在您的服务器上执行某些操作时才需要访问 3rd 方网络服务器,我建议您执行以下操作:

  • 不要在数据库中存储密码

  • 创建一个带有第 3 方服务密码的 cookie,并使用一些密钥进行加密。将此 cookie 发送回给用户。

  • 一旦用户返回您的网站,您将获得 cookie、解密它、从 cookie 中获取密码并使用它来访问 3rd 方网络服务。

因此,在这种情况下,如果有人入侵您的服务器并复制数据库,他们将没有第三方网络服务的密码。在这种情况下,如果有人入侵用户的计算机,所有的 cookie 都会被加密,因此他们将无法对它们做任何事情。

唯一的安全漏洞是,如果有人能够将一些代码注入您的服务器并从活动用户会话中捕获密码。

于 2012-08-29T21:35:07.303 回答
1

一般来说,最好对正确的密码进行哈希处理,但在您的情况下,这似乎是不可能的。我绝对不建议在 SQL 服务器本身上使用对称密钥进行加密,原因是如果您的 SQL 服务器受到威胁,那么您的加密也会受到威胁(因为密钥将在同一台服务器上)。

我建议的一件事是您在某处使用临时商店,这可能类似于会话中的内容。但是,请小心使用会话和 cookie,因为您可能容易受到 CSRF 攻击和会话/cookie 劫持攻击。您可以做的一件事是让用户输入密码,然后对其进行加密并将其存储在他们的 cookie 中,将他们的客户端 IP 附加到 cookie 中,然后在开头添加一个过期时间戳(这也将使雪崩效应更有效,因为您正在更改明文开头的位)。要求对 Web 服务的请求附加一些在客户端呈现的 CSRF 令牌,并且它是 POST 而不是获取,

如果用户 cookie 被盗,那么他们将无法发出请求,因为它特定于他们的客户端 IP(除非他们欺骗用户 IP,但此时你意识到这个攻击者并不那么聪明,因为我确信有其他更简单的攻击向量,这将为它们提供更大的有效载荷)。如果用户能够以某种方式欺骗 IP,他们将无法长时间使用它,因为超时将使 cookie 无效。如果用户足够聪明,可以很好地破解你的加密算法……那么你几乎一开始就没有机会。

于 2012-10-09T01:56:01.167 回答