2012-10-06 163 views
1

我发现了一些能够告诉我导致SQL Compact DB加密的资源,就像在连接字符串中指定密码一样简单。但是,我不喜欢在我的web.config文件中保留该密码。我知道我可以在运行时动态地为DbContext提供连接字符串,但即使在那里,我仍然在连接字符串中包含纯文本密码。我的代码中哪些密码容易受到攻击?如何保护加密的SQL Server Compact数据库的密码?

回答

0

你为什么害怕在服务器上输入密码?大多数系统,例如在一个database.yml文件中的Rails,将它们的连接存储在某处。

但是你可以做些什么来保护它是创建一个用于保存连接的encryption.dat文件。在您的web.config文件中,您只需放置连接的“名称”,然后您需要一个可以加密/解密连接字符串并在运行时将其置于适当位置的类。

,你可以在这里找到一个样本项目:http://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C

但是,这不会给你100%的安全,我怀疑它是值得的。最好确保您的Windows保护程序安全正确,以便没有人可以在未经许可的情况下访问它。

+0

我在共享主机上,管理员都可以访问我的web.config文件。我宁愿密码不要那么公然可用。我的正常数据库连接仍然存在,但我的客户指定他们想要在单独的加密数据库中使用信用卡详细信息,所以我已经开始了额外的工作,并且还可以使其紧密。 – ProfK

1

显然,如果托管公司有权访问服务器,则无法获胜。如果他们真的想要,他们不能阻止他们学习密码。

所以你只能混淆密码。我认为一个好的折衷是硬编码在这样的源代码的密码:

var plainPassword = Enconding.UTF8.GetString(Convert.FromBase64("encoded-pw-here")) 

这应该保护是简单的字符串搜索和这样。我认为你不能或应该做更多。

+0

我*可以做更多的事情,使用加密的密码和远程获得的解密密钥,但您在这里建议的内容似乎相当充分。 – ProfK

+0

解密密钥仍然需要在服务器上,即使只有一毫秒。托管公司仍然可以拦截它。它可以读取所有内容。 – usr