专栏首页NetCore保护连接字符串

保护连接字符串

保护连接字符串

摘自MSDN

保护对数据源的访问是安全应用程序最重要的目标之一。为了帮助限制对数据源的访问,必须保护连接信息(例如用户标识、密码和数据源名称)的连接信息。以纯文本形式存储用户标识和密码(例如在源代码中)会造成严重的安全问题。即使为外部源提供包含用户标识和密码信息的编译版代码,编译的代码也可能会被反汇编,用户标识和密码可能会被使用 MSIL 反汇编程序 (Ildasm.exe) 工具公开。因此,关键信息(如用户标识和密码)一定不要存在于代码中。

指定 Windows 身份验证(集成安全性)

建议您尽可能使用 Windows 身份验证(也称为集成安全性)。连接字符串中使用的语法依提供程序而异。下表显示 .NET Framework 数据提供程序所使用的语法。

提供程序

语法

SqlClient

复制代码 Integrated Security=true;

SqlClient, OleDb

复制代码 Integrated Security=SSPI;

Odbc

复制代码 Trusted_Connection=yes;

OracleClient

复制代码 Integrated Security=yes;

注意,在对 OleDb 提供程序使用 Integrated Security=true 时会引发异常。

安全注意

如果在连接字符串中将 Persist Security Info 关键字设置为 true 或 yes,将允许在打开连接后,从连接中获得涉及安全性的信息(包括用户标识和密码)。如果在建立连接时必须提供用户标识和密码,最安全的方法是在使用信息打开连接后丢弃这些信息,在 Persist Security Info 设置为 false 或 no 时会发生这种情况。当您向不可信的源提供打开的连接,或将连接信息永久保存到磁盘时,这点尤其重要。如果将 Persist Security Info 保持为 false,可帮助确保不可信的源无法访问连接中涉及安全性的信息,并帮助确保任何涉及安全性的信息都不会随连接字符串信息永久保存到磁盘中。默认情况下,Persist Security Info 设置为 false。

不要使用通用数据链接文件

可以在通用数据链接 (UDL) 文件中提供 OleDbConnection 的连接信息;但是,应避免这样做。UDL 文件未加密,会以明文的形式公开连接字符串信息。因为 UDL 文件对应用程序来说是基于外部文件的资源,所以,无法使用 .NET Framework 保护其安全。

将连接字符串存储在配置文件中

为了避免将连接字符串存储在代码中,可以将代码存储在 ASP.NET 应用程序的 web.config 文件中以及 Windows 应用程序的 app.config 文件中。

连接字符串可以存储在配置文件的 <connectionStrings> 元素中。连接字符串存储为键/值对的形式,可以在运行时使用名称查找存储在 connectionString 属性中的值。以下配置文件示例显示名为 DatabaseConnection 的连接字符串,该连接字符串引用连接到 SQL Server 本地实例的连接字符串。

<connectionStrings>
<add name="DatabaseConnection"
connectionString="Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local);"
providerName="System.Data.SqlClient" />
</connectionStrings>

从配置文件中检索连接字符串

System.Configuration 命名空间提供使用配置文件中存储的配置信息的类。ConnectionStringSettings 类具有两个属性,映射到上面所示的 <connectionStrings> 示例部分中显示的名称。 ConnectionString

连接字符串。 Name

<connectionStrings> 部分的连接字符串的名称。

以下示例通过将连接字符串的名称传递给 ConfigurationManager,再由其返回 ConnectionStringSettings 对象,以便从配置文件中检索字符串。ConnectionString 属性用于显示此值。

Visual Basic

Option Explicit On
Option Strict On
Imports System.Configuration
Module Module1
Sub Main()
Dim settings As ConnectionStringSettings
settings = _
ConfigurationManager.ConnectionStrings("DatabaseConnection")
If Not settings Is Nothing Then
Console.WriteLine(settings.ConnectionString)
End If
End Sub
End Module

C#

using System;
using System.Configuration;
class Program
{
static void Main()
{
ConnectionStringSettings settings;
settings =
ConfigurationManager.ConnectionStrings["DatabaseConnection"];
if (settings != null)
{
Console.WriteLine(settings.ConnectionString);
}
}
}

使用受保护的配置加密连接字符串

“受保护的配置”功能可以用于加密配置文件(例如 ASP.NET 应用程序的 Web.config 文件或 Windows 应用程序的 App.config 文件)中的敏感信息,包括用户名和密码、数据库连接字符串和加密密钥。请参见使用受保护的配置加密配置信息对配置节进行加密和解密演练:使用受保护的配置加密配置信息

通过用户输入构造连接字符串

如果从外部源(例如提供用户标识和密码的用户)获取连接字符串信息,必须验证来自该源的所有输入,确保其格式正确并且不包含影响连接的其他参数。有关详细信息,请参见验证用户输入

使用连接字符串生成器

DbConnectionStringBuilder 类提供用于派生强类型化的连接字符串生成器的基类。这些生成器使您可以通过编程创建语法上正确的连接字符串以及分析和重建现有的连接字符串。可以使用 DbConnectionStringBuilder 类分配任意键/值对,并将生成的连接字符串传递给强类型化的提供程序。以下作为 .NET Framework 的一部分提供的数据提供程序提供从 DbConnectionStringBuilder 继承的强类型化的类:

请参见

任务 如何:确保使用数据源控件时连接字符串的安全

概念 使用连接字符串 加密和数据访问 Securing the User's Password

其他资源 保证 ADO.NET 应用程序的安全 使用受保护的配置加密配置信息

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

    最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过...

    脑洞的蜂蜜
  • 因为WMI配置,无法执行Sql Server 系统配置检查器的解决办法

    今天重装机器,重新要安装sql 2005,遇到了如下问题: 因为WMI配置,无法执行Sql Server 系统配置检查器的解决办法 随即网上搜索了下,办法不多,...

    脑洞的蜂蜜
  • 【强烈推荐】数据库迁移利器:Migrator.Net

    简介 很郁闷,写了一天的遇到LiveWriter错误,可恶啊 几年前在做项目中第一次接触到了Migrator.Net,就深深被吸引住了,至此以后在新的大项目中,...

    脑洞的蜂蜜
  • 移动端超英特尔桌面端,全线7nm:AMD锐龙4000出炉,今年一季度上市

    CES 2020 即将在今天正式开始,AMD 于北京时间今晨在拉斯维加斯提前举办了自己的新产品发布会。其中最为重磅的内容就是锐龙 7 4000 移动端 CPU ...

    机器之心
  • 【Python入门】Python字符串的45个方法详解

    Python中字符串对象提供了很多方法来操作字符串,功能相当丰富。必须进行全面的了解与学习,后面的代码处理才能更得心应手,编程水平走向新台阶的坚实基础。目前一共...

    黄博的机器学习圈子
  • 李嘉诚和邓小平最爱讲的十个故事

    1、获得胜利的方法故事:有人用玻璃把一条蛇和一只青蛙在水池里隔开。开始时,蛇要吃青蛙,它一次次冲向青蛙,却一次次撞到了玻璃隔板上,它吃不着。过了一会,蛇放弃了努...

    小小科
  • 【25】Python生成器generat

    进入正题:生成器 通过列表生成式,我们可以直接创建一个列表。但是,受内存限制,列表的容量肯定有限。如果创建大量数据,结果只用到几条,那也是相当占用空间的。 所以...

    py3study
  • 【点击率预估】Wide&deep 点击率预估模型

    导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

    用户1386409
  • python多线程获取子线程任务返回值

    程序员同行者
  • 你没看错!SQLMap v1.3.10正式发布!

    对于广大渗透测试和网络安全研究人员来说,SQLMap想必是大家非常熟悉的东西了。SQLMap是一个开源的渗透测试工具,可以用来对目标应用进行自动化的SQL注入漏...

    FB客服

扫码关注云+社区

领取腾讯云代金券