亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

輕松加密ASP.NET 2.0 Web程序配置信息

2019-11-18 16:55:08
字體:
來源:轉載
供稿:網友

  一、 簡介

  當創建asp.net 2.0應用程序時,開發者通常都把敏感的配置信息存儲在Web.config文件中。最典型的示例就是數據庫連接字符串,但是包括在Web.config文件中的其它敏感信息還包括SMTP服務器連接信息和用戶憑證數據,等等。盡管默認情況下可以配置ASP.NET以拒絕所有對擴展名為.config的文件資源的HTTP請求;但是,如果一個黑客能夠存取你的web服務器的文件系統的話,那么,Web.config中的敏感信息仍然能夠被竊取。例如,也許你不小心允許匿名FTP存取你的網站,這樣以來就允許一個黑客簡單地通過FTP協議下載你的Web.config文件。

  幸好,通過允許加密Web.config文件中選擇的部分,例如<connectionStrings>節,或你的應用程序使用的一些定制config節,ASP.NET 2.0有助于緩解這個問題。配置部分能夠很容易地使用編碼或aspnet_regiis.exe(一個命令行程序)預以加密。一旦被加密,Web.config設置即可避開"虎視眈眈"的眼睛。而且,當以編程方式從你的ASP.NET頁面中檢索加密的配置設置時,ASP.NET會自動地解密它讀取的加密部分。簡言之,一旦配置信息被加密,你就不需要在你的應用程序中編寫任何其它代碼或采取任何進一步的行為來使用該加密數據。

  在本文中,我們將討論如何以編程方式加密和解密該配置設置部分,并且分析一下命令行程序aspnet_regiis.exe的使用。然后,我們將評估ASP.NET 2.0提供的加密選項。另外,還會簡短地討論一下如何加密ASP.NET版本1.x中的配置信息。

  二、 前提

  在我們開始探討如何加密ASP.NET 2.0配置信息之前,請記住下列幾點:

  1. 所有形式的加密都會包含某種秘密,而當加密和解密數據時都要使用這一秘密。對稱加密算法在加密和解密一個消息時使用同一把密鑰,而非對稱加密算法對于加密和解密卻使用不同的密鑰。無論使用哪種技術,最重要的還是看解密密鑰的安全保存程度。

  2. ASP.NET 2.0提供的配置加密技術的設計目的在于,力圖阻止能夠以某種方式檢索你的配置文件的黑客的入侵。其實現思想是,如果在黑客的計算機上有你的Web.config文件;那么,他不能破解該加密的部分。然而,當web服務器上的一個ASP.NET頁面從一個加密的配置文件請求信息時,該數據必須被解密才能使用(并且這時不需要你編寫任何代碼)。因此,如果一個黑客能夠把一個能夠查詢配置文件并顯示它的結果的ASP.NET web頁面上傳到你的系統,那么,他就能夠以普通文本方式觀看被加密的設置。(詳細情況請參考本文提供的示例ASP.NET頁面,它展示了加密和解密Web.config文件中各部分的方法;如你所見,一個ASP.NET頁面能夠存取(并顯示)該加密數據的普通文本形式)

  3. 加密和解密配置信息需要付出一定的性能代價。因此,通常是僅加密包含敏感信息的配置部分。比如說,可能不需要加密<compilation>或<authorization>配置部分。

  三、 加密何種信息

  在我們分析如何加密ASP.NET 2.0配置信息前,讓我們首先來看一下能夠加密什么配置信息。使用.NET框架2.0提供的庫,開發人員能夠加密在Web.config或machine.config文件中的絕大多數的配置部分。這些配置部分是一些作為<configuration>或<system.web>元素子結點的xml元素。例如,下面的示例Web.config文件中含有三個配置設置,顯式地定義為:

<connectionStrings>,<compilation>和<authentication>。
<?xml version="1.0"?>
<configuration xmlns="<connectionStrings>
?。糰dd name="Membersh
</connectionStrings>
<system.web>
 <compilation debug="true"/>
?。糰uthentication mode="Forms" />
</system.web>

  這些節中的每一個都可以有選擇地被加密,或者通過編程方式或通過aspnet_regiis.exe(一個命令行工具)實現。當被加密時,加密后的文本直接存儲在配置文件中。例如,如果我們要加密上面的<connectionStrings>節,那么結果Web.config文件可能看起來如下所示:(注意:篇幅所限,我們省略了一大塊<CipherValue>)

<?xml version="1.0"?>
<configuration xmlns="
<connectionStrings config<EncryptedData>
 <CipherData>
 ?。糃ipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAed...GicAlQ==</CipherValue>
?。?CipherData>
</EncryptedData>
</connectionStrings>
<system.web>
 <compilation debug="true"/>
?。糰uthentication mode="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.Net/Framework/Version/CONFIG目錄下。

  四、加密選項

  開發人員可以使用ASP.NET 2.0提供程序模型來保護配置節信息,這允許任何實現都可以被無縫地插入到該API中。.NET框架2.0中提供了兩個內置的提供程序用于保護配置節信息:

  · Windows數據保護API(DPAPI)提供程序(DataProtectionConfigurationProvider):這個提供程序使用Windows內置的密碼學技術來加解密配置節。默認情況下,這個提供程序使用本機的密鑰。你還能夠使用用戶密鑰,但是這要求進行一點定制。

  · RSA保護的配置提供程序(RSAProtectedConfigurationProvider):使用RSA公鑰加密來加解密配置節。使用這個提供程序,你需要創建存儲用于加解密配置信息的公鑰和私鑰的密鑰容器。你能夠在一個多服務器場所下使用RSA,這只要創建可輸出的密鑰容器即可。
當然,如果需要的話,你還能夠創建自己的保護設置提供程序。

  在本文中,我們僅討論使用DPAPI提供程序使用機器級密鑰。到目前為止,這是最簡單的方法,因為它不請求創建任何密鑰或密鑰容器。當然,其消極的一面在于:一個加密的配置文件僅能夠用于首先實現加密的web服務器上;而且,使用機器密鑰將允許加密的文本能夠被web服務器上的任何網站所解密。

  五、以編程方式加密配置部分

  System.Configuration.SectionInformation類對一個配置節的描述進行了抽象。為了加密一個配置節,只需要簡單地使用SectionInformation類的ProtectSection(提供程序)方法,傳遞你想使用的提供程序的名字來執行加密。為了存取你的應用程序的Web.config文件中的一個特定的配置節,你可以使用WebConfigurationManager類(在System.Web.Configuration命名空間中)來引用你的Web.config文件,然后使用它的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),并且它打開Web.config文件,引用該節,調用SectionInformation對象的ProtectSection(provider)方法,最后保存配置變化。

  另一方面,UnProtectSection(provider)方法實現解密一個特定的配置節。在此,僅需要傳入要解密的節-我們不需要麻煩提供程序,因為該信息已經存儲在伴隨encrypted節的標記中(也即是,在上面的示例中的<connectionStrings>節,在被加密以后,它包含了提供程序:<connectionStringsconfigProtectionProvider="DataProtectionConfigurationProvider">)。

  記住,一旦該數據被加密,當從一個ASP.NET頁面讀取它時(也即是,從一個SqlDataSource控件或以編程方式經由ConfigurationManager.ConnectionStrings[connStringName].ConnectionString讀取該連接字符串信息),ASP.NET會自動地解密該連接字符串并且返回普通文本值。換句話說,在實現加密后,你一點不需要改變你的代碼。相當酷,對不對?

  從本文下載的示例ASP.NET 2.0網站中,你會發現有一個示例頁面,它展示了該站點的Web.config文件,其中有一個多行TextBox,還提供了相應的Web控件按鈕用于加密配置文件的各個部分。這個示例中也使用了上面已經討論過的ProtectSection()和UnProtectSection()方法。

  六、 使用命令行工具aspnet_regiis.exe

  你還能夠使用aspnet_regiis.exe命令行工具來加密和解密Web.config文件配置部分,你可以在"%WINDOWSDIR%/Microsoft.Net/Framework/version"目錄下找到這個工具。為了加密Web.config文件中的一個節,你可以在這個命令行工具中使用DPAPI機器密鑰,如下所示:

  加密一個特定網站的Web.config文件的通用形式:

aspnet_regiis.exe -pef section physical_directory -prov provider

  或:

aspnet_regiis.exe -pe section -app virtual_directory -prov provider

  加密一個特定網站的Web.config文件的具體實例:

aspnet_regiis.exe -pef "connectionStrings" "C:/Inetpub/wwwroot/MySite" -prov "DataProtectionConfigurationProvider"

  或:

aspnet_regiis.exe -pe "connectionStrings" -app "/MySite" -prov "DataProtectionConfigurationProvider"

  解密一個特定網站的Web.config文件的通用形式:

aspnet_regiis.exe -pdf section physical_directory

  或:

aspnet_regiis.exe -pd section -app virtual_directory 

  解密一個特定網站的Web.config文件的具體實例:

aspnet_regiis.exe -pdf "connectionStrings" "C:/Inetpub/wwwroot/MySite"

  或:

  你還能夠指定由aspnet_regiis.exe來執行machine.config文件的加密/解密。

  【提示】 加密ASP.NET版本1.x中的配置設置

  為了保護ASP.NET版本1.x中的配置設置,開發者需要加密并把敏感的設置存儲在web服務器的注冊表中,并以一種"強"鍵方式存儲。配置文件中不是存儲加密的內容(如ASP.NET 2.0那樣),而只是包含一個到存儲該加密值的注冊表鍵的引用。例如:

<identity impersonate="true"
userName="registry:HKLM/SOFTWARE/MY_SECURE_APP/identity/ASPNET_SETREG,userName"
passWord="registry:HKLM/SOFTWARE/MY_SECURE_APP/identity/ASPNET_SETREG,password" />

  微軟為開發人員提供了aspnet_setreg.exe命令行工具,用于加密敏感的配置信息并且把它移動到一個"強"注冊表入口處。遺憾的是,這個工具僅針對特定的配置設置工作;相比之下,ASP.NET 2.0允許加密任何配置節。

  有關于在一個ASP.NET 1.x應用程序中使用aspnet_setreg.exe的更多信息請參考MSDN中的KB#32990。遺憾的是,這個命令行程序僅能加密配置設置中的預定義的節,并且不允許你加密你自己添加的數據庫連接字符串和其它敏感信息。

  七、 結論

  在本文中,我們學習了如何使用ASP.NET 2.0提供的不同的加密選項來保護配置節信息,還討論了如何使用編程技術和aspnet_regiis.exe來分別加密Web.config中的配置節。保護你的敏感的配置設置有助于確保你的站點更難于被黑客攻擊-通過使其更難于發現敏感的配置設置。如今,ASP.NET 2.0已經提供了相對容易的加密和解密技術,開發者毫無理由不使用這種方式來保護你的敏感的配置設置。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
大荫蒂欧美视频另类xxxx| 亚洲香蕉av在线一区二区三区| 成人伊人精品色xxxx视频| 深夜成人在线观看| 成人福利视频在线观看| 欧美巨猛xxxx猛交黑人97人| 欧美极品少妇xxxxⅹ裸体艺术| 国产一区在线播放| 久久视频在线看| 国产欧美最新羞羞视频在线观看| 国产精品久久久久福利| 日韩中文字幕网站| 在线观看国产精品日韩av| 国产a级全部精品| 91欧美精品午夜性色福利在线| 午夜精品久久久久久久久久久久久| 91久久精品一区| 91久久国产综合久久91精品网站| 日韩综合中文字幕| 久久久av免费| 91探花福利精品国产自产在线| 日韩av免费网站| 午夜精品三级视频福利| 91国内揄拍国内精品对白| 日韩中文字幕亚洲| 国产成人亚洲综合| 欧美日韩另类在线| 91av在线播放视频| 国产91在线播放九色快色| 欧美激情一二区| 亚洲精品电影网在线观看| 欧美在线视频在线播放完整版免费观看| 亚洲人午夜色婷婷| 国产美女精品免费电影| 狠狠综合久久av一区二区小说| 中文字幕亚洲欧美日韩2019| 97视频在线看| 亚洲女人初尝黑人巨大| 在线视频日韩精品| 91黑丝高跟在线| 久久久999精品| 一区二区三区回区在观看免费视频| 久久九九精品99国产精品| 97香蕉超级碰碰久久免费的优势| 欧美极品少妇与黑人| 国产成人亚洲综合91| 一区二区三区四区视频| 久久精品2019中文字幕| 久久久久久久久久久成人| 国产亚洲一区精品| 欧美激情网友自拍| 国产精品99久久久久久久久久久久| 欧美视频第一页| 欧美日韩一区二区精品| 国产91精品久久久久| 欧美激情xxxx性bbbb| 精品一区二区电影| 日韩免费在线电影| 欧美xxxx综合视频| 九九久久综合网站| www欧美日韩| 欧美一级高清免费| 日韩av电影在线播放| 国产精品视频免费观看www| 成人黄色短视频在线观看| 美女性感视频久久久| 色悠悠久久久久| 成人国产亚洲精品a区天堂华泰| 欧美极品少妇xxxxⅹ裸体艺术| 国产一区av在线| 一区二区在线视频播放| 97香蕉久久夜色精品国产| 久久久精品一区二区三区| 日韩视频精品在线| 97视频在线观看播放| 在线观看视频亚洲| 欧美高清在线视频观看不卡| 久久国产精品久久久久久久久久| 久久精品成人欧美大片古装| 亚洲精选在线观看| 亚洲国产精品大全| 亚洲美女激情视频| 91豆花精品一区| 国产亚洲精品久久久久动| 国产亚洲美女久久| 久久影视免费观看| 国产精品视频永久免费播放| 亚洲乱码一区av黑人高潮| 国产精品久久久久久久久久小说| 欧美电影在线免费观看网站| 亚洲男女自偷自拍图片另类| 8090成年在线看片午夜| 精品国产乱码久久久久久天美| 日韩少妇与小伙激情| 91欧美精品午夜性色福利在线| 精品一区二区三区四区| 日韩电影中文字幕在线| 日韩欧美在线视频观看| 欧美日韩美女在线观看| 成人精品一区二区三区电影黑人| 久久久999精品免费| 久久成人免费视频| 精品爽片免费看久久| 国产一区二区色| 久久久欧美精品| 川上优av一区二区线观看| 欧美巨大黑人极品精男| 一本色道久久综合狠狠躁篇怎么玩| 一本色道久久88综合亚洲精品ⅰ| 久久这里只有精品视频首页| 91精品视频免费| 国产欧美日韩免费| 国产精品福利在线| 精品久久久av| 38少妇精品导航| 久久久久久午夜| 欧美激情视频三区| 亚洲国产成人91精品| 欧美电影在线观看完整版| 国产精品福利片| 国产精品视频白浆免费视频| 国产精品日日做人人爱| 欧美激情免费观看| 国产一区欧美二区三区| 68精品久久久久久欧美| 亚洲男人天堂古典| 精品久久久久久久久中文字幕| 国产高清在线不卡| 亚洲欧美自拍一区| 久久精品国产96久久久香蕉| www.午夜精品| 亚洲免费一在线| 北条麻妃一区二区在线观看| 这里只有精品在线播放| 国产精品无av码在线观看| 欧美性猛交xxxxx水多| 狠狠色香婷婷久久亚洲精品| 久久综合色88| 亚洲国内高清视频| 91久久久久久| 国产欧美精品在线播放| 国产精品久久久久久久av大片| 91免费看视频.| 国产日韩欧美视频| 精品久久久久久中文字幕| 精品亚洲一区二区三区四区五区| 久久久久九九九九| 久久国产视频网站| 国产精品男女猛烈高潮激情| 狠狠操狠狠色综合网| 国内精品小视频在线观看| 国产一区二区美女视频| 51午夜精品视频| 成人免费网站在线| 日本a级片电影一区二区| 亚洲福利视频久久| 亚洲国产精品一区二区三区| 日韩电影免费在线观看| 欧美激情视频网站| 国产精品狠色婷| 欧美整片在线观看| 这里精品视频免费| 国产自产女人91一区在线观看| 精品欧美激情精品一区|