而不是在web.config文件中设置连接字符串,因为似乎最好的做法是在应用程序代码中有这个有什么问题吗? 我的web.config文件包含明文密码,我不认为任何加密方法会帮助我,因为我使用mono / nginx来托管这个站点而不是IIS。 该项目的一部分涉及授予用户访问.aspx文件的权限以运行某些更改,但我无法阻止他们查看web.config文件。我也许可以将.aspx放在另一个文件夹然后限制,但上面的内容可能会解决我的问题
我正在使用MySQL
答案 0 :(得分:1)
在代码中放一个普通字符串并不比放入web.config文件更安全,因为编译后的dll可以更容易反编译。
我建议删除配置文件中除Web应用程序以外的所有读取权限。
我还建议你阅读这个有用的答案: https://security.stackexchange.com/a/15055
答案 1 :(得分:1)
如前所述,对应用程序代码中的连接字符串进行硬编码意味着,如果连接字符串发生更改(例如更改密码),则需要重新编译并重新部署应用程序。
我理解您的担忧与在web.config
文件中以明文形式存储的凭据有关。由于这个原因,Microsoft允许您加密web.config
文件的各个部分。
这在MSDN上的“Encrypting and Decrypting Configuration Sections”页面上有记录,以及以下演练:“Encrypting Configuration Information Using Protected Configuration”。
此方法使用aspnet_regiis
实用程序加密web.config
文件。例如,以下命令加密<ConnectionStrings>
文件的web.config
部分,用于名为MyApplication
的应用程序:
aspnet_regiis -pe "connectionStrings" -app "/MyApplication"
查看我上面提供的两个链接(特别是第二个),了解如何根据您的需要自定义此链接以及使用它所需的代码。
答案 2 :(得分:0)
这是我认为最好的解决方案。
任何一个选项的不利之处在于,他们可以在执行期间打印连接字符串的值并获取密码,这就是第一步至关重要的原因。
答案 3 :(得分:0)
一种经常被低估的机制,可能对您有用,是machine.config文件。对于安装了.net框架的任何计算机的硬盘驱动器上的静态位置,每个版本的.net框架都有一个不同的machine.config文件,如果您的Web应用程序在其web.config中找不到配置设置文件,它会自动在该机器的machine.config文件中查找它作为后备。在过去,我已经利用了这一点,并将连接字符串从web.config中移出并转移到服务器的machine.config中,并且无需进行任何代码更改即可正常工作。