|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。asp.net|web|程序|加密<P> 1、简介
当创立ASP.NET2.0使用程序时,开辟者一般都把敏感的设置信息存储在Web.config文件中。最典范的示例就是数据库毗连字符串,可是包含在Web.config文件中的别的敏感信息还包含SMTP服务器毗连信息和用户凭据数据,等等。只管默许情形下能够设置ASP.NET以回绝一切对扩大名为.config的文件资本的HTTP哀求;可是,假如一个黑客可以存取你的web服务器的文件体系的话,那末,Web.config中的敏感信息仍旧可以被夺取。比方,大概你不当心同意匿名FTP存取你的网站,如许以来就同意一个黑客复杂地经由过程FTP协定下载你的Web.config文件。
幸亏,经由过程同意加密Web.config文件当选择的部分,比方<connectionStrings>节,或你的使用程序利用的一些定制config节,ASP.NET2.0有助于减缓这个成绩。设置部分可以很简单地利用编码或aspnet_regiis.exe(一个命令路程序)预以加密。一旦被加密,Web.config设置便可避开"虎视眈眈"的眼睛。并且,当以编程体例从你的ASP.NET页面中检索加密的设置设置时,ASP.NET会主动地解密它读取的加密部分。简言之,一旦设置信息被加密,你就不必要在你的使用程序中编写任何别的代码或接纳任何进一步的举动来利用该加密数据。
在本文中,我们将会商怎样以编程体例加密息争密该设置设置部分,而且剖析一下命令路程序aspnet_regiis.exe的利用。然后,我们将评价ASP.NET2.0供应的加密选项。别的,还会冗长地会商一下怎样加密ASP.NET版本1.x中的设置信息。
2、条件
在我们入手下手切磋怎样加密ASP.NET2.0设置信息之前,请记着以下几点:
1.一切情势的加密城市包括某种奥密,而当加密息争密数据时都要利用这一奥密。对称加密算法在加密息争密一个动静时利用统一把密钥,而非对称加密算法关于加密息争密却利用分歧的密钥。不管利用哪一种手艺,最主要的仍是看解密密钥的平安保留水平。
2.ASP.NET2.0供应的设置加密手艺的计划目标在于,力争制止可以以某种体例检索你的设置文件的黑客的进侵。实在现头脑是,假如在黑客的盘算机上有你的Web.config文件;那末,他不克不及破解该加密的部分。但是,当web服务器上的一个ASP.NET页面从一个加密的设置文件哀求信息时,该数据必需被解密才干利用(而且这时候不必要你编写任何代码)。因而,假如一个黑客可以把一个可以查询设置文件并显现它的了局的ASP.NETweb页面上传到你的体系,那末,他就可以够以一般文本体例寓目被加密的设置。(具体情形请参考本文供应的示例ASP.NET页面,它展现了加密息争密Web.config文件中各部分的办法;如你所见,一个ASP.NET页面可以存取(并显现)该加密数据的一般文本情势)
3.加密息争密设置信息必要支付必定的功能价值。因而,一般是仅加密包括敏感信息的设置部分。好比说,大概不必要加密<compilation>或<authorization>设置部分。
3、加密何种信息
在我们剖析怎样加密ASP.NET2.0设置信息前,让我们起首来看一下可以加密甚么设置信息。利用.NET框架2.0供应的库,开辟职员可以加密在Web.config或machine.config文件中的尽年夜多半的设置部分。这些设置部分是一些作为<configuration>或<system.web>元素子结点的XML元素。比方,上面的示例Web.config文件中含有三个设置设置,显式地界说为:
<connectionStrings>,<compilation>和<authentication>。
<?xmlversion="1.0"?>
<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<addname="MembershipConnectionString"connectionString="connectionString"/>
</connectionStrings>
<system.web>
<compilationdebug="true"/>
<authenticationmode="Forms"/>
</system.web>
这些节中的每个都能够有选择地被加密,大概经由过程编程体例或经由过程aspnet_regiis.exe(一个命令行工具)完成。当被加密时,加密后的文本间接存储在设置文件中。比方,假如我们要加密下面的<connectionStrings>节,那末了局Web.config文件大概看起来以下所示:(注重:篇幅所限,我们省略了一年夜块<CipherValue>)
<?xmlversion="1.0"?>
<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStringsconfigProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAed...GicAlQ==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
<system.web>
<compilationdebug="true"/>
<authenticationmode="Forms"/>
</system.web>
别的,存在一些你不克不及利用这个手艺加密的设置部分:
・<processModel>
・<runtime>
・<mscorlib>
・<startup>
・<system.runtime.remoting>
・<configProtectedData>
・<satelliteassemblies>
・<cryptographySettings>
・<cryptoNameMapping>
・<cryptoClasses>
为了加密这些设置部分,你必需加密这些值并把它存储在注册表中。存在一个aspnet_setreg.exe命令行工具能够匡助你完成这一历程;我们将在本文前面会商这个工具。
【提醒】Web.Config和Machine.Config之区分:
Web.config文件指定针对一个特定的web使用程序的设置设置,而且位于使用程序的根目次下;而machine.config文件指定一切的位于该web服务器上的站点的设置设置,而且位于$WINDOWSDIR$Microsoft.NetFrameworkVersionCONFIG目次下。
<P> 4、加密选项
开辟职员可使用ASP.NET2.0供应程序模子来回护设置节信息,这同意任何完成都能够被无缝地拔出到该API中。.NET框架2.0中供应了两个内置的供应程序用于回护设置节信息:
・Windows数据回护API(DPAPI)供应程序(DataProtectionConfigurationProvider):这个供应程序利用Windows内置的暗码学手艺来加解密设置节。默许情形下,这个供应程序利用本机的密钥。你还可以利用用户密钥,可是这请求举行一点定制。
・RSA回护的设置供应程序(RSAProtectedConfigurationProvider):利用RSA公钥加密来加解密设置节。利用这个供应程序,你必要创立存储用于加解密设置信息的公钥和私钥的密钥容器。你可以在一个多服务器场合下利用RSA,这只需创立可输入的密钥容器便可。
固然,假如必要的话,你还可以创立本人的回护设置供应程序。
在本文中,我们仅会商利用DPAPI供应程序利用呆板级密钥。到今朝为止,这是最复杂的办法,由于它不哀求创立任何密钥或密钥容器。固然,其悲观的一面在于:一个加密的设置文件仅可以用于起首完成加密的web服务器上;并且,利用呆板密钥将同意加密的文天性够被web服务器上的任何网站所解密。
5、以编程体例加密设置部分
System.Configuration.SectionInformation类对一个设置节的形貌举行了笼统。为了加密一个设置节,只必要复杂地利用SectionInformation类的ProtectSection(供应程序)办法,传送你想利用的供应程序的名字来实行加密。为了存取你的使用程序的Web.config文件中的一个特定的设置节,你可使用WebConfigurationManager类(在System.Web.Configuration定名空间中)来援用你的Web.config文件,然后利用它的GetSection(sectionName)办法前往一个ConfigurationSection实例。最初,你能够经过ConfigurationSection实例的SectionInformation属性失掉一个SectionInformation工具。
上面,我们经由过程一个复杂的代码示例来讲明成绩:
privatevoidProtectSection(stringsectionName,stringprovider)
{
Configurationconfig=WebConfigurationManager.
OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSectionsection=config.GetSection(sectionName);
if(section!=null&&!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection(provider);
config.Save();
}
}
privatevoidUnProtectSection(stringsectionName){
Configurationconfig=WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSectionsection=config.GetSection(sectionName);
if(section!=null&§ion.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
config.Save();
}
你能够从一个ASP.NET页面中挪用这个ProtectSection(sectionName,provider)办法,其响应的参数是一个节名(如connectionStrings)和一个供应程序(如DataProtectionConfigurationProvider),而且它翻开Web.config文件,援用该节,挪用SectionInformation工具的ProtectSection(provider)办法,最初保留设置变更。
另外一方面,UnProtectSection(provider)办法完成解密一个特定的设置节。在此,仅必要传进要解密的节-我们不必要贫苦供应程序,由于该信息已存储在陪伴encrypted节的标志中(也便是,在下面的示例中的<connectionStrings>节,在被加密今后,它包括了供应程序:<connectionStringsconfigProtectionProvider="DataProtectionConfigurationProvider">)。
记着,一旦该数据被加密,当从一个ASP.NET页面读取它时(也便是,从一个SqlDataSource控件或以编程体例经过ConfigurationManager.ConnectionStrings[connStringName].ConnectionString读取该毗连字符串信息),ASP.NET会主动地解密该毗连字符串而且前往一般文本值。换句话说,在完成加密后,你一点不必要改动你的代码。相称酷,对不合错误?
从本文下载的示例ASP.NET2.0网站中,你会发明有一个示例页面,它展现了该站点的Web.config文件,个中有一个多行TextBox,还供应了响应的Web控件按钮用于加密设置文件的各个部分。这个示例中也利用了下面已会商过的ProtectSection()和UnProtectSection()办法。
<P> 6、利用命令行工具aspnet_regiis.exe
你还可以利用aspnet_regiis.exe命令行工具来加密息争密Web.config文件设置部分,你能够在"%WINDOWSDIR%Microsoft.NetFrameworkversion"目次下找到这个工具。为了加密Web.config文件中的一个节,你能够在这个命令行工具中利用DPAPI呆板密钥,以下所示:
加密一个特定网站的Web.config文件的通用情势:
aspnet_regiis.exe-pefsectionphysical_directory-provprovider
或:
aspnet_regiis.exe-pesection-appvirtual_directory-provprovider
加密一个特定网站的Web.config文件的详细实例:
aspnet_regiis.exe-pef"connectionStrings""C:InetpubwwwrootMySite"-prov"DataProtectionConfigurationProvider"
或:
aspnet_regiis.exe-pe"connectionStrings"-app"/MySite"-prov"DataProtectionConfigurationProvider"
解密一个特定网站的Web.config文件的通用情势:
aspnet_regiis.exe-pdfsectionphysical_directory
或:
aspnet_regiis.exe-pdsection-appvirtual_directory
解密一个特定网站的Web.config文件的详细实例:
aspnet_regiis.exe-pdf"connectionStrings""C:InetpubwwwrootMySite"
或:
你还可以指定由aspnet_regiis.exe来实行machine.config文件的加密/解密。
【提醒】加密ASP.NET版本1.x中的设置设置
为了回护ASP.NET版本1.x中的设置设置,开辟者必要加密并把敏感的设置存储在web服务器的注册表中,并以一种"强"键体例存储。设置文件中不是存储加密的内容(如ASP.NET2.0那样),而只是包括一个到存储该加密值的注册表键的援用。比方:
<identityimpersonate="true"
userName="registry:HKLMSOFTWAREMY_SECURE_APPidentityASPNET_SETREG,userName"
password="registry:HKLMSOFTWAREMY_SECURE_APPidentityASPNET_SETREG,password"/>
微软为开辟职员供应了aspnet_setreg.exe命令行工具,用于加密敏感的设置信息而且把它挪动到一个"强"注册表出口处。遗憾的是,这个工具仅针对特定的设置设置事情;比拟之下,ASP.NET2.0同意加密任何设置节。
有关于在一个ASP.NET1.x使用程序中利用aspnet_setreg.exe的更多信息请参考MSDN中的KB#32990。遗憾的是,这个命令路程序仅能加密设置设置中的预界说的节,而且不同意你加密你本人增加的数据库毗连字符串和别的敏感信息。
7、结论
在本文中,我们进修了怎样利用ASP.NET2.0供应的分歧的加密选项来回护设置节信息,还会商了怎样利用编程手艺和aspnet_regiis.exe来分离加密Web.config中的设置节。回护你的敏感的设置设置有助于确保你的站点更难于被黑客打击-经由过程使其更难于发明敏感的设置设置。现在,ASP.NET2.0已供应了绝对简单的加密息争密手艺,开辟者毫在理由不利用这类体例来回护你的敏感的设置设置。
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。 |
|