• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之七十一:保护连接字符串及其它设置信息

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

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net,c#和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言:

  ASP.NET应用程序的设置信息通常都存储在一个名为Web.config的XML文件里。在教程的前面部分我们已经好几次修改过Web.config文件了.比如在第一章,我们创建名为Northwind的数据集时,数据库连接字符串信息自动的添加到Web.config文件的<connectionStrings>节点.再后来,在第3章里,我们手动更新了Web.config文件,添加了一个<pages>元素,对所有的ASP.NET页面运用DataWebControls主题.

  由于Web.config文件包含了敏感的信息,比如连接字符串.所以确保Web.config文件内容的安全性是很重要的,对未经授权的访问者应隐藏这些敏感信息.默认情况下,对.config后缀名的文件的任何HTTP请求都由ASP.NET引擎来处理,它将返回“This type of page is not served”的信息,如图1所示.这意味着访问者无法通过在其浏览器的地址栏键入‘http://www.YourServer.com/Web.config'来访问你的Web.config文件.

http://files.weikejianghu.com/file_images/article/201605/2016051911235961.png
图1:通过浏览器访问Web.config将返回“This type of page is not served”的信息

  但是如果某个攻击者找到其它方法来访问你的Web.config文件的内容又怎么办呢?他会做怎样的修改?我们又采取怎样的步骤来保护Web.config文件的这些信息呢?幸运的是,Web.config文件的绝大多数节点并不包含敏感信息.如果攻击者知道你的ASP.NET页面使用的默认的主题的名字又会搞哪些破坏呢?

  Web.config文件的某些节点包含了敏感信息,比如:connection strings, user names, passwords, server names, encryption keys等等.我们能在下面的这些节点找到这些信息:

.<appSettings>
.<connectionStrings>
.<identity>
.<sessionState>
</div>

  在本文我们将考察保护这些敏感信息的技术.就像我们将看到的那样,.NET Framework 2.0版本包含了一个保护配置系统,我们可以使用它很容易地对选定的配置节点进行加密和解密.

  注意:在本文结尾部分,我们将看到微软对从一个ASP.NET应用程序连接到数据库时的建议.除了对连接字符串进行加密外,我们还可以连接到一个处于“安全模式”的数据库使你的系统更强大.

第一步:考察ASP.NET 2.0的保护配置选项

ASP.NET 2.0包含一个保护配置系统以对配置信息进行加密和解密.这些方法包含在.NET Framework,可用来编程加密和解密配置信息.该保护配置系统使用provider model模式.它允许开发者选择执行哪种加密.

.NET Framework包含了2种protected configuration providers:

.RSAProtectedConfigurationProvider :加密和解密时使用不对称RSA运算法则(RSA algorithm)

.DPAPIProtectedConfigurationProvider:加密和解密时使用Windows Data Protection API (DPAPI)

由于保护配置系统执行的是provider design模式,因此我们可以创建自己的protected configuration provider并运用到自己的程序里.具体过程可参阅文章《Implementing a Protected Configuration Provider》(http://msdn2.microsoft.com/en-us/library/wfc2t3az(VS.80).aspx)

  RSA providers 和 DPAPI providers在加密和解密时使用“密匙”(keys),这些“密匙”可以存储在“机器级”(Machine-level)和“用户级”(user-level).机器级密匙在这种情况下很理想:每个web应用程序都运行在自己专有的服务器上,或某个服务器上的多个应用程序共享同样的加密信息.而用户级密匙在共享服务器环境里是比较理想的安全选择.此时,同服务器上的其它程序不能对你加密的配置信息进行解密.

  本教程的示例将使用DPAPI provider和机器级密匙.具体来说,我们将对Web.config文件里的<connectionStrings>节点进行加密.对RSA provider以及用户级密匙的更多信息请参考本文结束部分的外延阅读资料.

  注意:RSAProtectedConfigurationProvider 和DPAPIProtectedConfigurationProvider providers在machine.config文件里被分别组册成RsaProtectedConfigurationProvider 和DataProtectionConfigurationProvider。当我们对配置信息进行加密或解密时我们需要提供相应的provider名称(即RsaProtectedConfigurationProvider 或 DataProtectionConfigurationProvider);而不是实际的类型名(即RSAProtectedConfigurationProvider 和 DPAPIProtectedConfigurationProvider). 你可以在$WINDOWS$/Microsoft.NET/Framework/version/CONFIG文件夹里找到machine.config文件.

第二步:通过编程加密和解密配置节点

  使用某个provider,我们只需要很少的几行代码就可以对某个配置节点加密或解密.这些代码仅仅需要引用相应的配置节点,调用其ProtectSection 或 UnprotectSection方法,再调用Save方法来执行.另外,.NET Framework包含了一个很有用的命令行功能来进行加密和解密,我们将在第3步考察该功能.

  为了便于演示,我们需要创建一个包含按钮的ASP.NET页面,以便于对Web.config文件的<connectionStrings>节点进行加密和解密.

  打开AdvancedDAL文件夹里的EncryptingConfigSections.aspx页面,拖一个TextBox控件到页面,设其ID为WebConfigContents;TextMode属性为MultiLine;Width和Rows属性分别为95% 和 15.该TextBox控件用于显示Web.config文件的内容,以查看其内容是否已经加密了.当然,在现实程序里,我们不可能将Web.config文件的内容显示出来.

  在该TextBox控件下面添加2个Button控件,ID分别为EncryptConnStrings 和 DecryptConnStrings;设其Text属性为“Encrypt Connection Strings” 和 “Decrypt Connection Strings”.

此时你的界面看起来和下面的差不多:

http://files.weikejianghu.com/file_images/article/201605/2016051911235962.png
图2:在页面上添加一个TextBox控件和2个Button控件

  接下来,在页面初次登录时我们需要在ID为WebConfigContents的TextBox控件里将Web.config文件的内容显示出来。在页面的后台类里添加如下的代码,该代码添加了一个名为DisplayWebConfig的方法,在Page_Load事件处理器里,当Page.IsPostBack 为 false时便调用该方法:

protected void Page_Load(object sender, EventArgs e)
{
 // On the first page visit, call DisplayWebConfig method
 if (!Page.IsPostBack)
 DisplayWebConfig();
}

private void DisplayWebConfig()
{
 // Reads in the contents of Web.config and displays them in the TextBox
 StreamReader webConfigStream =
 File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
 string configContents = webConfigStream.ReadToEnd();
 webConfigStream.Close();

 WebConfigContents.Text = configContents;
}

</div>

  该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 (c



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR 应用并实现群聊功能 开源代码
  • asp.net动态更新
  • asp.net利用母版制作页脚效果
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决
  • 使用asp.net mvc,boostrap及knockout.js开发微信自定义菜单编辑工具(推荐)
  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • ASP.NET MVC从视图传参到控制器的几种形式
  • Asp.net core WebApi 使用Swagger生成帮助页实例

相关文章

  • 2017-05-11c# 在WebBrowser中用SendMessage模拟鼠标点击
  • 2017-05-11asp.net 多数据库支持的思考
  • 2017-05-11asp.net网页里面为什么找不到CS文件
  • 2017-05-11asp.net 2.0的文件上传(突破上传限制4M)
  • 2018-08-20MVC框架是什么 这里为你解答
  • 2017-05-11js实现网页防止被iframe框架嵌套及几种location.href的区别
  • 2017-05-11ASP.NET基于Ajax的Enter键提交问题分析
  • 2017-05-11微信公众平台开发之处理图片.Net代码解析
  • 2017-05-11asp.net中virtual和abstract的区别分析
  • 2017-05-11asp.net 实现下拉框只读功能

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 前台JS(jquery ajax)调用后台方法实现无刷新级联菜单示例
    • ASP.NET拒绝访问临时目录的解决方法
    • c#多图片上传并生成缩略图的实例代码
    • ewebeditor在.net的使用方法
    • ASP.NET中Cookie的使用方法
    • 浅谈.NET反射机制的性能优化 附实例下载
    • asp.net web.config加密解密方法
    • asp.net网络数据库开发实例精解 源文件
    • asp.net 计划任务管理程序实现,多线程任务加载
    • ASP.NET MVC Layout如何嵌套

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有