加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之七十一:保护连接字符串及其它设置信

发布时间:2016-11-23 10:42:47 所属栏目:MsSql教程 来源:站长网
导读:导言: ASP.NET应用程序的设置信息通常都存储在一个名为Web.config的XML文件里。在教程的前面部分我们已经好几次修改过Web.config文件了.比如在第一章,我们创建名为Northwind的数据集时,数据库连接字符串信息自动的添加到Web.config文件的connectionStri

  该DisplayWebConfig方法调用File class类来打开应用程序的Web.config文件;调用StreamReader class类将内容读入一个字符串;再调用Path class类来获取Web.config文件的物理地址.这3个类都位于System.IO命名空间.所以我们应该在后台类的顶部添加using System.IO声明,又或者在这些类的前面添加“System.IO.”前缀.

  接下来,我们需要为这2个按钮的Click事件添加事件处理器,在一个DPAPI provider里使用机器级密匙对<connectionStrings>节点进行加密和解密.在设计器里,双击这2个按钮以添加Click事件处理器,添加如下代码:

protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
 // Get configuration information about Web.config
 Configuration config =
 WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

 // Let's work with the <connectionStrings> section
 ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
 if (connectionStrings != null)
 // Only encrypt the section if it is not already protected
 if (!connectionStrings.SectionInformation.IsProtected)
 {
  // Encrypt the <connectionStrings> section using the
  // DataProtectionConfigurationProvider provider
  connectionStrings.SectionInformation.ProtectSection(
  "DataProtectionConfigurationProvider");
  config.Save();
  
  // Refresh the Web.config display
  DisplayWebConfig();
 }
}

protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
 // Get configuration information about Web.config
 Configuration config =
 WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

 // Let's work with the <connectionStrings> section
 ConfigurationSection connectionStrings =
 config.GetSection("connectionStrings");
 if (connectionStrings != null)
 // Only decrypt the section if it is protected
 if (connectionStrings.SectionInformation.IsProtected)
 {
  // Decrypt the <connectionStrings> section
  connectionStrings.SectionInformation.UnprotectSection();
  config.Save();

  // Refresh the Web.config display
  DisplayWebConfig();
 }
}

  这2个按钮的事件处理器的代码几乎是一样的.它们一开始都通过WebConfigurationManager class类的OpenWebConfiguration方法获取当前应用程序的Web.config文件的信息. 该方法根据指定的有效路径返回web配置文件。接下来,再通过Configuration class类的GetSection(sectionName)方法访问Web.config文件的<connectionStrings>节点.该方法返回一个ConfigurationSection对象.

  该ConfigurationSection对象包含了一个SectionInformation属性,用来阐述加密节点的其它相关信息. 就像上面的代码显示的那样,我们通过查看SectionInformation的IsProtected属性来判断是否对配置节点进行了加密.此外,还可以通过SectionInformation的ProtectSection(provider) 和 UnprotectSection方法对节点进行加密或解密.

  ProtectSection(provider)方法有一个字符串类型的输入参数,该参数指定了用来加密的protected configuration provider的名称。在EncryptConnString按钮的事件处理器里,我们将“DataProtectionConfigurationProvider”传递给ProtectSection(provider)方法,因此指明了用到的是DPAPI provider.而UnprotectSection方法可以确定加密时用到的provider,因此不需要任何的输入参数.

  调用ProtectSection(provider) 或 UnprotectSection方法后,我还必须调用Configuration对象的Save method方法来进行具体的操作. 一旦完成加密或解密并保存后,我们调用DisplayWebConfig方法将更新后的Web.config文件的内容上传到TextBox控件.

  键入上述代码后,在浏览器里测试EncryptingConfigSections.aspx页面,最开始你将看到页面将Web.config文件的<connectionStrings>节点的内容以纯文本的形式展示出来.

/uploads/allimg/c161121/14OI95J14320-1N2N5.png
图3:显示<connectionStrings>节点的内容

  现在,点击“Encrypt Connection Strings”按钮,如果“请求确认”(request validation)处于激活状态的话,回传页面时将抛出一个HttpRequestValidationException异常,显示一个消息:“A potentially dangerous Request.Form value was detected from the client.”。这个Request validation,在ASP.NET 2.0里默认为处于激活状态,禁止服务器接受含有未编码的HTML的内容,它被设计来保护服务器免受注入式脚本的攻击.可以从页面或应用程序来禁止该功能.我们在该页禁用它,在页面声明代码的顶部的的@Page标记里ValidateRequest设置为false,如下:

<%@ Page ValidateRequest="False" ... %>

  在禁用该功能后,再次点击“Encrypt Connection Strings”按钮,页面回传后就可以访问配置文件了,并用DPAPI provider对<connectionStrings>节点进行加密. TextBox控件然后将Web.config文件更新后的内容显示出来,如图4所示,<connectionStrings>节点的信息现在已经被加密了.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读