知识大全 轻松加密ASP.NET 2.0 Web程序配置信息

Posted 文件

篇首语:黄金的宝藏比不上知识的宝藏。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 轻松加密ASP.NET 2.0 Web程序配置信息相关的知识,希望对你有一定的参考价值。

轻松加密ASP.NET 2.0 Web程序配置信息  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

一 简介  当创建ASP NET 应用程序时 开发者通常都把敏感的配置信息存储在nfig文件中 最典型的示例就是数据库连接字符串 但是包括在nfig文件中的其它敏感信息还包括SMTP服务器连接信息和用户凭证数据 等等 尽管默认情况下可以配置ASP NET以拒绝所有对扩展名nfig的文件资源的HTTP请求 但是 如果一个黑客能够存取你的web服务器的文件系统的话 那么 nfig中的敏感信息仍然能够被窃取 例如 也许你不小心允许匿名FTP存取你的网站 这样以来就允许一个黑客简单地通过FTP协议下载你的nfig文件   幸好 通过允许加密nfig文件中选择的部分 例如<connectionStrings>节 或你的应用程序使用的一些定制config节 ASP NET 有助于缓解这个问题 配置部分能够很容易地使用编码或aspnet_regiis exe(一个命令行程序)预以加密 一旦被加密 nfig设置即可避开 虎视眈眈 的眼睛 而且 当以编程方式从你的ASP NET页面中检索加密的配置设置时 ASP NET会自动地解密它读取的加密部分 简言之 一旦配置信息被加密 你就不需要在你的应用程序中编写任何其它代码或采取任何进一步的行为来使用该加密数据   在本文中 我们将讨论如何以编程方式加密和解密该配置设置部分 并且分析一下命令行程序aspnet_regiis exe的使用 然后 我们将评估ASP NET 提供的加密选项 另外 还会简短地讨论一下如何加密ASP NET版本 x中的配置信息    二 前提  在我们开始探讨如何加密ASP NET 配置信息之前 请记住下列几点    所有形式的加密都会包含某种秘密 而当加密和解密数据时都要使用这一秘密 对称加密算法在加密和解密一个消息时使用同一把密钥 而非对称加密算法对于加密和解密却使用不同的密钥 无论使用哪种技术 最重要的还是看解密密钥的安全保存程度    ASP NET 提供的配置加密技术的设计目的在于 力图阻止能够以某种方式检索你的配置文件的黑客的入侵 其实现思想是 如果在黑客的计算机上有你的nfig文件 那么 他不能破解该加密的部分 然而 当web服务器上的一个ASP NET页面从一个加密的配置文件请求信息时 该数据必须被解密才能使用(并且这时不需要你编写任何代码) 因此 如果一个黑客能够把一个能够查询配置文件并显示它的结果的ASP NET web页面上传到你的系统 那么 他就能够以普通文本方式观看被加密的设置 (详细情况请参考本文提供的示例ASP NET页面 它展示了加密和解密nfig文件中各部分的方法 如你所见 一个ASP NET页面能够存取(并显示)该加密数据的普通文本形式)   加密和解密配置信息需要付出一定的性能代价 因此 通常是仅加密包含敏感信息的配置部分 比如说 可能不需要加密<pilation>或<authorization>配置部分    三 加密何种信息  在我们分析如何加密ASP NET 配置信息前 让我们首先来看一下能够加密什么配置信息 使用 NET框架 提供的库 开发人员能够加密在nfig或nfig文件中的绝大多数的配置部分 这些配置部分是一些作为<configuration>或<system web>元素子结点的XML元素 例如 下面的示例nfig文件中含有三个配置设置 显式地定义为 <connectionStrings> <pilation>和<authentication> <?xml version= ?><configuration xmlns= ><connectionStrings> <add name= MembershipConnectionString connectionString= connectionString /></connectionStrings><system web> <pilation debug= true /> <authentication mode= Forms /></system web>  这些节中的每一个都可以有选择地被加密 或者通过编程方式或通过aspnet_regiis exe(一个命令行工具)实现 当被加密时 加密后的文本直接存储在配置文件中 例如 如果我们要加密上面的<connectionStrings>节 那么结果nfig文件可能看起来如下所示 (注意 篇幅所限 我们省略了一大块<CipherValue>) <?xml version= ?><configuration xmlns= ><connectionStrings configProtectionProvider= DataProtectionConfigurationProvider ><EncryptedData> <CipherData>  <CipherValue>AQAAANCMnd BFdERjHoAwE/Cl+sBAAAAed GicAlQ==</CipherValue> </CipherData></EncryptedData></connectionStrings><system web> <pilation debug= true /> <authentication mode= Forms /></system web>

  另外 存在一些你不能使用这个技术加密的配置部分   · <processModel>  · <runtime>  · <mscorlib>  · <startup>  · <system runtime remoting>  · <configProtectedData>  · <satelliteassemblies>  · <cryptographySettings>  · <cryptoNameMapping>  · <cryptoClasses>  为了加密这些配置部分 你必须加密这些值并把它存储在注册表中 存在一个aspnet_setreg exe命令行工具可以帮助你实现这一过程 我们将在本文后面讨论这个工具   【提示】Web Config和Machine Config之区别   nfig文件指定针对一个特定的web应用程序的配置设置 并且位于应用程序的根目录下 而nfig文件指定所有的位于该web服务器上的站点的配置设置 并且位于$WINDOWSDIR$\\Microsoft Net\\Framework\\Version\\CONFIG目录下

   

  四 加密选项  开发人员可以使用ASP NET 提供程序模型来保护配置节信息 这允许任何实现都可以被无缝地插入到该API中 NET框架 中提供了两个内置的提供程序用于保护配置节信息

  · Windows数据保护API(DPAPI)提供程序(DataProtectionConfigurationProvider) 这个提供程序使用Windows内置的密码学技术来加解密配置节 默认情况下 这个提供程序使用本机的密钥 你还能够使用用户密钥 但是这要求进行一点定制   · RSA保护的配置提供程序(RSAProtectedConfigurationProvider) 使用RSA公钥加密来加解密配置节 使用这个提供程序 你需要创建存储用于加解密配置信息的公钥和私钥的密钥容器 你能够在一个多服务器场所下使用RSA 这只要创建可输出的密钥容器即可 当然 如果需要的话 你还能够创建自己的保护设置提供程序   在本文中 我们仅讨论使用DPAPI提供程序使用机器级密钥 到目前为止 这是最简单的方法 因为它不请求创建任何密钥或密钥容器 当然 其消极的一面在于 一个加密的配置文件仅能够用于首先实现加密的web服务器上 而且 使用机器密钥将允许加密的文本能够被web服务器上的任何网站所解密   五 以编程方式加密配置部分  System Configuration SectionInformation类对一个配置节的描述进行了抽象 为了加密一个配置节 只需要简单地使用SectionInformation类的ProtectSection(提供程序)方法 传递你想使用的提供程序的名字来执行加密 为了存取你的应用程序的nfig文件中的一个特定的配置节 你可以使用WebConfigurationManager类(在System Web Configuration命名空间中)来引用你的nfig文件 然后使用它的GetSection(sectionName)方法返回一个ConfigurationSection实例 最后 你可以经由ConfigurationSection实例的SectionInformation属性得到一个SectionInformation对象   下面 我们通过一个简单的代码示例来说明问题

   privatevoid ProtectSection(string sectionName string provider) Configuration config = WebConfigurationManager  OpenWebConfiguration(Request ApplicationPath); ConfigurationSection section = config GetSection(sectionName); if (section != null &&!section SectionInformation IsProtected)   section SectionInformation ProtectSection(provider);  config Save(); private void UnProtectSection(string sectionName)  Configuration config =WebConfigurationManager OpenWebConfiguration(Request ApplicationPath); ConfigurationSection section = config GetSectio n(sectionName); if (section != null && section SectionInformation IsProtected)   section SectionInformation UnprotectSection();  config Save(); 

  你可以从一个ASP NET页面中调用这个ProtectSection(sectionName provider)方法 其相应的参数是一个节名(如connectionStrings)和一个提供程序(如DataProtectionConfigurationProvider) 并且它打开nfig文件 引用该节 调用SectionInformation对象的ProtectSection(provider)方法 最后保存配置变化   另一方面 UnProtectSection(provider)方法实现解密一个特定的配置节 在此 仅需要传入要解密的节 我们不需要麻烦提供程序 因为该信息已经存储在伴随encrypted节的标记中(也即是 在上面的示例中的<connectionStrings>节 在被加密以后 它包含了提供程序 <connectionStringsconfigProtectionProvider= DataProtectionConfigurationProvider >)   记住 一旦该数据被加密 当从一个ASP NET页面读取它时(也即是 从一个SqlDataSource控件或以编程方式经由ConfigurationManager ConnectionStrings[connStringName] ConnectionString读取该连接字符串信息) ASP NET会自动地解密该连接字符串并且返回普通文本值 换句话说 在实现加密后 你一点不需要改变你的代码 相当酷 对不对?  从本文下载的示例ASP NET 网站中 你会发现有一个示例页面 它展示了该站点的nfig文件 其中有一个多行TextBox 还提供了相应的Web控件按钮用于加密配置文件的各个部分 这个示例中也使用了上面已经讨论过的ProtectSection()和UnProtectSection()方法

   

  六 使用命令行工具aspnet_regiis exe  你还能够使用aspnet_regiis exe命令行工具来加密和解密nfig文件配置部分 你可以在 %WINDOWSDIR%\\Microsoft Net\\Framework\\version 目录下找到这个工具 为了加密nfig文件中的一个节 你可以在这个命令行工具中使用DPAPI机器密钥 如下所示   加密一个特定网站的nfig文件的通用形式

   aspnet_regiis exe pef section physical_directory prov provider

  或

   aspnet_regiis exe pe section app virtual_directory prov provider

  加密一个特定网站的nfig文件的具体实例

   aspnet_regiis exe pef connectionStrings C:\\Inetpub\\root\\MySite prov DataProtectionConfigurationProvider

  或

   aspnet_regiis exe pe connectionStrings app /MySite prov DataProtectionConfigurationProvider

  解密一个特定网站的nfig文件的通用形式

   aspnet_regiis exe pdf section physical_directory

  或

   aspnet_regiis exe pd section app virtual_directory

  解密一个特定网站的nfig文件的具体实例

   aspnet_regiis exe pdf connectionStrings C:\\Inetpub\\root\\MySite

  或   你还能够指定由aspnet_regiis exe来执行nfig文件的加密/解密   【提示】 加密ASP NET版本 x中的配置设置  为了保护ASP NET版本 x中的配置设置 开发者需要加密并把敏感的设置存储在web服务器的注册表中 并以一种 强 键方式存储 配置文件中不是存储加密的内容(如ASP NET 那样) 而只是包含一个到存储该加密值的注册表键的引用 例如

   <identity impersonate= true userName= registry:HKLM\\SOFARE\\MY_SECURE_APP\\identity\\ASPNET_SETREG userName password= registry:HKLM\\SOFARE\\MY_SECURE_APP\\identity\\ASPNET_SETREG password />

cha138/Article/program/net/201311/12440

相关参考

知识大全 使用 Web 标准生成 ASP.NET 2.0

使用Web标准生成ASP.NET2.0  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要Mic

知识大全 探讨ASP.NET 2.0的Web控件改进之概述

探讨ASP.NET2.0的Web控件改进之概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一引言

知识大全 ASP.NET 2.0的Web Part Framework

ASP.NET2.0的WebPartFramework  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Web Parts在ASP.NET 2.0中的应用

WebParts在ASP.NET2.0中的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  W

知识大全 ASP.NET 使用Web.config配置数据

ASP.NET使用Web.config配置数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  建

知识大全 ASP.NET项目开发指南:Web.Config中的配置信息

ASP.NET项目开发指南:Web.Config中的配置信息  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET项目开发指南:自定义Web.Config文件配置节

ASP.NET项目开发指南:自定义Web.Config文件配置节  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 ASP.NET 2.0程序的安全知识

ASP.NET2.0程序的安全知识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成员关系的概念

知识大全 asp.net、IIS和Web应用程序

asp.net、IIS和Web应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一个Web

知识大全 ASP.NET 2.0程序安全的基础知识

ASP.NET2.0程序安全的基础知识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成员关系的