博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

处理连接字符串的安全性

Posted on 2010-12-07 20:29  itcfj  阅读(297)  评论(0编辑  收藏  举报

处理连接字符串的安全性

 本次课程内容包括
? 数据库安全性 ? 定义连接字符串 ? 防止注入式攻击 ? 存储连接字符串 ? 加密连接字符串 ? 受保护的配置

议程
? 数据库安全性
? 定义连接字符串 ? 防止注入式攻击 ? 存储连接字符串 ? 加密连接字符串 ? 受保护的配置

数据库安全性
? 尽量使用 Windows 身份验证而不是 SQL
    Server 验证
- 安全容易管理
    不需要在连接字符串中设置用户名和密码 - 可以通过密码策略保证安全
- 密码不会通过明文在网络中传递

集成 Windows 身份验证
提供程序
语法
Integrated Security=true;
SqlClient
-- or  -
Integrated Security=SSPI; Integrated Security=SSPI;
OleDb
Trusted_Connection=yes;
Odbc
Integrated Security=yes;
OracleClient

SQL Server 身份验证
? SQL Server 身份验证
- 强制实施密码策略
- 强制密码过期
用户在下次登录时必须更改密码

议程
? 数据库安全性
? 定义连接字符串
? 防止注入式攻击 ? 存储连接字符串 ? 加密连接字符串 ? 受保护的配置

定义连接字符串
? Persist Security Info 关键字的默认设置为
    false。
? 如果将其设置为 true 或 yes,则允许在打
    开连接后通过连接获取安全敏感信息(包 括用户 ID 和密码)。
? 保持将 PersistSecurity Info 设置为 false,
    以确保不受信任的来源不能访问敏感的连 接字符串信息。

DEMO
修改 Persist Security Info

议程
? 数据库安全性 ? 定义连接字符串
? 防止注入式攻击
? 存储连接字符串 ? 加密连接字符串 ? 受保护的配置

连接字符串注入式攻击
? 类似于 SQL 注入式攻击
? 在连接字符串中通过分号(;)来加入其它参数 ? 例如:连接字符串通过下面方式拼接:
string constr = “server=(local);database=Northwind;
    uid=sa;pwd=“ + password;
而输入
    password=“password01!;Pooling=true;Min Pool Size=999999;Max Pool Size=999999;”

连接字符串生成器
? ADO.NET 2.0 为每个 .NET Framework 数
    据提供程序引入了新的连接字符串生成器 ? 从 DbConnectionStringBuilder 继承
提供程序
ConnectionStringBuilder 类
System.Data.SqlClient
SqlConnectionStringBuilder
System.Data.OleDb
OleDbConnectionStringBuilder
System.Data.Odbc
OdbcConnectionStringBuilder
System.Data.OracleClient
OracleConnectionStringBuilder

避免连接字符串注入式攻击
System.Data.SqlClient.SqlConnectionStringBuilder builder = new
    System.Data.SqlClient.SqlConnectionStringBuilder(); builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad"; Console.WriteLine(builder.ConnectionString);
输出结果:
data source=(local);Integrated Security=True; initial
    catalog="AdventureWorks;NewValue=Bad"

DEMO
使用连接字符串生成器

议程
? 数据库安全性 ? 定义连接字符串 ? 防止注入式攻击
? 存储连接字符串
? 加密连接字符串 ? 受保护的配置

存储连接字符串
? 连接字符串可以存储在
- 配置文件
- COM+ Catalog
    Windows 注册表 - 自定义文件结构

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

议程
? 数据库安全性 ? 定义连接字符串 ? 防止注入式攻击 ? 存储连接字符串
? 加密连接字符串
? 受保护的配置

加密连接字符串
? .NET 当中的加密算法
- 对称算法(RSA) - 非对称算法(3DES) 数据保护(DPAPI)

DEMO
加密连接字符串

受保护配置
? 使用受保护配置对连接字符串值进行加密
    的配置文件不以明文形式显示连接字符串, 而是以加密形式存储它们
? 在对页进行请求时,  NET Framework 对连.
    接字符串信息进行解密,并使其可供应用 程序使用

创建配置
?  ASP.NET IIS 注册工具 (Aspnet_regiis.exe)
- 对 Web.config 文件的节进行加密和解密、创建或删除
    密钥容器、导出和导入密钥容器信息以及管理对密钥 容器的访问
?  System.Configuration 命名空间中的受保护配置
    类
- DPAPIProtectedConfigurationProvider。使用
    Windows 数据保护 API (DPAPI) 对数据进行加密和解 密
- RsaProtectedConfigurationProvider。使用 RSA 加密
    算法对数据进行加密和解密

加密与解密 Web 配置节
? 加密 Web 配置节
- aspnet_ regiis -pe "connectionStrings" -app
    "/SampleApplication" -prov
"RsaProtectedConfigurationProvider“
? 解密 Web 配置节
- aspnet_regiis -pd "connectionStrings" -app
    "/SampleApplication"

DEMO
使用受保护的配置

回顾
? 数据库安全性 ? 定义连接字符串 ? 防止注入式攻击 ? 存储连接字符串 ? 加密连接字符串 ? 受保护的配置

获取更多MSDN资源
?  MSDN中文网站
    http://msdn2.microsoft.com/zh‐cn ?  MSDN中文网络广播
    http://  www.microsoft.com/china/msdn/webcast ?  MSDN中文网络广播课程预告邮件
    http://www.microsoft.com/china/msdn/WebcastNewsletter/ ?  MSDN免费中文速递邮件 (MSDN  Flash)
    http://msdn2.microsoft.com/zh‐cn/flash ?  MSDN开发中心
http://msdn2.microsoft.com/zh‐cn/developercenters
?  MSDN图书中心
http://www.microsoft.com/china/msdn/book

Question & Answer
    如需提出问题,请在此区域输入文字,并单击 “问题和解答”右上方的“提问”按钮即可。
您也可以选择在微软中文技术论坛上寻求帮助,MSDN中文网络 广播的讲师们会定期在论坛上为大家解答与课程相关的技术问题。
http://forums.microsoft.com/china