【问题标题】:C# SQL connection string best practiceC# SQL 连接字符串最佳实践
【发布时间】:2017-09-07 20:19:40
【问题描述】:

我有一个使用连接字符串和通用用户连接到数据库的 winforms 应用程序

"Database=DBADAS;Server=TMT123\\SQLEXPRESS;User ID=user; Password=*****;

通过登录对话框连接到数据库后,我们检查数据库中的用户表中是否存在用户和密码。

我现在的问题是这是否是一个好习惯?因为基本上在连接字符串中有破解服务器所需的所有信息。

【问题讨论】:

    标签: sql-server database winforms login


    【解决方案1】:

    加密 Web.Config

    1. 以管理员权限打开命令提示符
    2. 在命令提示符处,输入:

      cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
      
    3. 如果您的 Web Config 位于“D:\Articles\EncryptWebConfig”目录路径中,则输入以下内容以加密 ConnectionString:

      ASPNET_REGIIS -pef "connectionStrings" "D:\Articles\EncryptWebConfig" 
      

    使用带有 –pef 选项的 Aspnet_regiis.exe 工具并指定应用程序路径,如上所示。

    注意:参数“connectionStrings”区分大小写。

    对于 Winforms: 您需要将您的 app.config 重命名为 web.config,使用步骤 1 到 3 对其进行加密,然后再次将其重命名为 app.config。

    参考:https://www.codeproject.com/Tips/795135/Encrypt-ConnectionString-in-Web-Config

    【讨论】:

    • 标签引用了 Winforms,所以这可能不是 Web 应用程序。
    • 这个方法还是可以用的,只需要将app.config重命名为web.config用upper方法加密,再将web.config重命名为app.config即可。
    【解决方案2】:

    有几种方法可以安全地解决这个问题。由于它是 Winforms 应用程序而不是 Web 应用程序,因此您的大多数安全风险都涉及网络中已经有人偷看连接字符串。这本身就增加了一层安全性。

    1.硬编码 您可以将获取用户的连接字符串硬编码到 DLL 中,并使您的应用程序依赖于该 DLL。我只建议这样做,因为听起来“通用用户”密码是永久的;否则,每次更改密码时都必须重新编译代码,然后再次部署。但是,这是非常安全的,因为该值不是以纯文本形式存储的。

    2。应用程序配置 您可以将其粘贴在配置文件中。在安全网络中,这可能是最通用的选项,因为您可以存储多个字符串并轻松更新它们,而无需更新整个应用程序。这与“DebugMode”设置等设置相得益彰。使用 App.Config 或其他 XML 文件是理想的,但您也可以滚动一个快速而肮脏的 .txt 文件。

    3.数据库 可能是最安全的方式,因为您可以加密您的数据库并编码您的程序以使用不相关的登录名从该数据库中获取其连接字符串和登录信息。这允许在用户尚未登录时更好地控制应用程序可以访问的内容。它还可以防止软件在网络之外运行,这可能是可取的。

    4.内部 API 让一个单独的应用程序提供这些数据会使用户能力与您的担忧分离,因为 API 和您的应用程序可以交换验证密钥以查看您的应用程序是否甚至有权尝试连接。这是我个人最喜欢的,但显然需要设置的工作最多。

    5.注册表项 根据您安装它的方式,将您需要的令牌嵌入注册表中可能会很好。这保证了应用程序需要管理员权限才能安装,并允许您使用 Windows 安全性来限制对配置单元的访问。

    再一次,因为它是一个内部的非网络应用程序,我不会太担心连接字符串的纯文本;如果有人已经深入到您的网络中,那么您可能已经遇到了更大的问题。我不会让它在本地目录中作为纯文本文件浮动,但任何高于此的安全程度对于您的目的来说都是可以接受的。

    【讨论】:

    • 这是一个很好的答案。谢谢!
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2010-10-11
    • 2011-03-17
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多