使用Windows.NET或ASP.NET应用程序时,数据库密码存放在哪里我有一个情况困扰了很多人年。如果我必须使用用户名和密码连接到数据库或其他服务(例如Web服务),那么在通过.NET程序集连接时,存储此信息的最安全位置在哪里?我知道你必须加密密码,但你遇到了一个鸡蛋问题-很好-你可以加密它,但你把钥匙放在哪里?在.NET中,您不能对密码进行硬编码,因为您可以反编译.NET代码。我考虑过将基于程序集的权限与隔离存储一起使用,但MS建议不要存储未加密的秘密项目,因为合格的用户可以获得访问权限,因此我们再次将问题从A点转移到B点。例如,域管理员不需要知道数据库中的信息就可以访问它,因为他们可以是域中任何工作站的管理员。您可以加密App.Config和Web.Config,但我相信用户可以访问密钥。我认为您对DPAPI有同样的问题。我考虑过将密码存储在远程数据库中,然后通过操作系统身份验证获取密码,但我们部门禁止将密码存储在数据库服务器上。我很确定我被卡住了,想要确认。您不想在程序集中存储密码,重新发明轮子只是比它的价值更麻烦(并引入更多漏洞)。如果您在数据库和Web服务器上都使用MS平台,处理此问题的最简单方法是使用受信任的连接,并将SQLServer上的权限授予您的应用程序正在使用的身份。其次,我会让DPAPI完成其加密连接设置的工作。您可以使用.NETFramework的以下方法来保护您的数据,它们在内部使用DPAPI来保护您的数据,您可以直接在C#或VB.NET中使用它们而无需使用系统DLL调用:Security.Cryptography{//摘要://提供保护和取消保护数据的方法。这个类不能被继承。publicsealedclassProtectedData{publicstaticbyte[]Protect(byte[]userData,byte[]optionalEntropy,DataProtectionScopescope);publicstaticbyte[]Unprotect(byte[]encryptedData,byte[]optionalEntropy,DataProtectionScope范围);要使用它,请将对System.Security的引用添加到您的项目中。我强烈建议使用字节数组optionalEntropy向受保护的数据添加盐(将一些随机值添加到您要保护的数据所特有的字节数组)。对于范围,您可以使用DataProtectionScope.CurrentUser,它将使用当前用户的凭据加密要保护的数据。DataProtectionScope.LocalMachine在某些情况下也很有用。在这种情况下,受保护的数据与机器上下文相关联。使用此设置,计算机上运行的任何进程都可以取消保护数据。它通常用于在服务器上运行的特定于服务器的应用程序,这些应用程序不允许不受信任的用户访问。使用Protect方法加密数据,使用Unprotect方法解密数据。您可以根据应用程序的要求(文件、数据库、注册表等)存储返回的字节数组。有关这些方法的更多信息,请访问MSDN:对于代码示例,如果您对加密应用程序的.config文件的某些部分感兴趣,请检查以下内容:我建议您使用SALT(即使用可选的熵参数)——它可以防止彩虹表攻击.我想提到的DPAPI解决方案有一个缺点:密钥是根据您的Windows凭据生成的,这意味着有权访问您的Windows凭据的人可能会访问受保护的数据。在您的帐户下运行的程序也可以访问受保护的数据。这是一个很好的问题,我一直在寻找答案。我遇到的问题是,如果服务器被黑并且可以检索单个文件,请确保数据库密码安全。我发现一个非常有趣的选项是web.config的各个部分可以由.NET框架自动加密和解密,它将使用Windows安全存储来保存和检索加密密钥。就我而言,它不起作用,因为我的托管服务提供商不支持它,但您可以查看此选项。我认为它可能起作用的原因是您可以独立管理用户可以访问Windows安全存储的内容的安全性,并显着限制任何潜在的违规行为。闯入服务器的黑客可能会获得配置文件和所有程序集的副本,但访问解密密钥是他的另一个障碍。这里有几个选项。以上是C#学习教程:使用Windows.NET或ASP.NET应用程序时,数据库密码的存放位置是共享的。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——将它们存储在一个加密的配置文件中,将它们存储在一个用生成的种子加密的外部文件中.混淆存储此基本种子的代码或将其存储在c++dll中(难以反编译)。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
