4

我有一个 Silverlight 3 应用程序,它连接到服务器以执行各种操作。我的用户使用表单身份验证登录,但他们请求的操作是使用 AppPool 帐户在服务器上运行的,因此当他们进入审核日志时,他们会根据 AppPool 帐户进行记录。PCI DSS 法规现在要求用户自己的 ID 存在于审计日志中,这意味着必须使用用户的信用来采取行动。现在,我可以在用户登录并提交每个请求时保存用户的凭据,并且服务器正在执行的操作可以使用这些凭据。但是 PCI 法规说,如果保存凭据,则必须对其进行加密(以避免有人获取 PC 的内存转储并获取密码)。

我能看到的唯一方法是从服务器获取公钥并用它加密密码,然后提交加密密码并使用私钥在服务器上解密。但 Silverlight 没有非对称加密。

我想我离问题太近了,必须有另一种解决方案,但我看不出它是什么。任何人都可以帮忙吗?

澄清

这是一个内部应用程序。到目前为止,我一直在使用 IIS Forms AuthN over SSL 到 Active Directory - 我不担心在传输过程中保护密码,只是当它保存在客户端的内存中时。据我了解,因为我使用的是Forms Authentication,所以除非我使用LogonUser,否则无法在服务器上进行模拟,这意味着我需要服务器上的密码,所以我每次都需要传输它,所以我需要持有它在客户端,在内存中,直到应用程序关闭。

4

2 回答 2

1

您是说您需要存储密码以便在 silverlight 应用程序中重复使用吗?如果您担心出现在内存中的密码未加密,那么 Silverlight 那么我认为您遇到了麻烦。

.NET 框架确实有一个SecureString用于您概述的确切目的的类。

不幸的是,Silverlight 版本的框架没有这个类。因此,即使您要在某些时候对密码的逻辑存储进行加密,您的代码也需要在使用它之前对其进行解密。此时分配的内存包含未加密形式的字符串。

我对表单身份验证了解不多,但如果您可以将用户原则映射到域用户(您似乎表明您需要),那么您将希望在服务器上运行代码时使用模拟。

或者停止使用 Forms 身份验证并使用 Windows 集成身份验证,您绝对可以使用模拟服务器端。

于 2010-02-09T20:41:53.387 回答
0

加密永远不应该用于密码。当您加密某些东西时,它会随之而来,应该有一种方法可以解密它。一种方式的哈希应该始终用于密码。md5 和 sha1 已被证明对于任何安全系统来说都太弱了。应该使用 Sha256,在 Silverlight 中这个库会处理它:http: //msdn.microsoft.com/en-us/library/system.security.cryptography.sha256%28VS.95%29.aspx

事实上,漏洞系列CWE-257可以识别使用“加密”存储密码。使用消息摘要是安全存储密码的唯一方法。这不是我编造的,它来自 NIST。存储密码时还会出现许多其他漏洞。这是NIST 整理的清单:

于 2010-02-09T18:21:46.537 回答