应用程序代码中的连接字符串

时间:2017-03-17 18:23:25

标签: c#

而不是在web.config文件中设置连接字符串,因为似乎最好的做法是在应用程序代码中有这个有什么问题吗? 我的web.config文件包含明文密码,我不认为任何加密方法会帮助我,因为我使用mono / nginx来托管这个站点而不是IIS。 该项目的一部分涉及授予用户访问.aspx文件的权限以运行某些更改,但我无法阻止他们查看web.config文件。我也许可以将.aspx放在另一个文件夹然后限制,但上面的内容可能会解决我的问题

我正在使用MySQL

4 个答案:

答案 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)

这是我认为最好的解决方案。

  1. 创建一个MySQL用户,该用户只拥有该页面绝对需要的表的权限,并且只有绝对必需的访问权限。因此,例如,如果他们只需要对一个表的选择访问权限,那么只给它们。
  2. 您可以在他们无法访问的另一个.cs文件中拥有连接字符串,或者您可以读取&#34; text&#34;中的连接字符串。文件不在客户端无权访问的目录中。
  3. 任何一个选项的不利之处在于,他们可以在执行期间打印连接字符串的值并获取密码,这就是第一步至关重要的原因。

答案 3 :(得分:0)

一种经常被低估的机制,可能对您有用,是machine.config文件。对于安装了.net框架的任何计算机的硬盘驱动器上的静态位置,每个版本的.net框架都有一个不同的machine.config文件,如果您的Web应用程序在其web.config中找不到配置设置文件,它会自动在该机器的machine.config文件中查找它作为后备。在过去,我已经利用了这一点,并将连接字符串从web.config中移出并转移到服务器的machine.config中,并且无需进行任何代码更改即可正常工作。