分析基於ASP.NET的Web網絡應用程序開發的平安策略實踐

 

摘要摘要:Web網絡應用開發中,平安性是要考慮的關鍵新問題,本文通過開發系統實踐,從系統規劃階段、設計開發階段、發佈運行階段三個方面具體闡述平安策略的實現,總結出如何充分利用ASP.NET的平安機制、數據庫平安控制、增強管理員網絡平安防範意識,構建一個性能平安的Web應用程序。
摘要:Web應用程序;web.config;認證和授權;視圖;存儲過程

1 前言

微軟公司推出的ASP.NET,可以非常方便和高效地規劃、設計、開發和發佈Web網絡應用程序。筆者利用ASP.NET爲新疆職工培訓中心開發了運行在校園網上的網絡辦公管理系統。該系統分爲管理部門和教學部門兩個角色,實現了數據存儲、瀏覽查詢和教學分析統計功能,提高了培訓中心的信息化管理和校園網的利用價值。在整個系統的開發過程中,考慮最多的就是平安新問題,相信這也是所有開發人員開發Web網絡應用程序所必須面對的新問題。因此本文針對基於ASP.NET的Web網絡應用程序開發的平安新問題,以我們開發的系統爲例,從3個方面來闡述實際解決策略摘要:
(1)系統規劃階段的平安策略;
(2)設計開發階段的平安策略;
(3)發佈運行階段的平安策略。
希望我們的實踐能對利用ASP.NET開發Web網絡應用程序的相關技術人員提供參考和借鑑。

2 平安策略實踐

2.1系統規劃階段
Web網絡應用程序,就是運行在Web應用服務器上的一個虛擬目錄及其子目錄下的所有文件、網頁、模塊以及可執行代碼的總和。根據系統需求分析,用戶分爲管理部和教學部(對數據的操作權限有區分),因此建立兩個目錄分別存放相應的網頁文件。另外,還有數據庫文件夾、樣式文件夾、網頁模版文件夾等。而對數據庫表的操作文件放在非凡的文件夾bin下,因爲該目錄是禁止任何瀏覽器訪問的,從而避免了遠程客戶下載代碼的可能性。應用程序根目錄下除了上述目錄外,還有兩個重要的應用程序級文件摘要:global.asax 和web.config(下文具體分析)。總之,文件目錄的規劃是按類別存放文件,重要文件存在bin目錄下。
2.2設計開發階段
主要從後臺的數據庫設計、配置文件web.config及前臺界面設計三個內容,着重闡述對平安新問題的解決策略。
2.2.1數據庫設計
爲了提高訪問數據的效率和平安性,能在後臺做的事情,就在後臺完成,能分開獨立做的事情,就分開獨立實現。
(1)充分利用後臺數據庫系統的視圖和存儲過程,如摘要:創建帶參數的視圖,實現不同角色身份的用戶對各自權限範圍內的數據訪問。
(2)報表設計及實現摘要:Web應用程序實現動態報表,開始考慮用ASP.NET的數據控件Repeater,可以自由定義靈活的顯示方式,但通常比較麻煩,而且在代碼中字段名要出現,即摘要:使用數據容器Container.DataItem("字段名")方式來顯示數據內容,降低了數據平安性。我們的做法是利用Bussiness Object 公司開發的專業報表軟件CrystalReports10設計報表,通過ODBC數據源和數據庫連接,生成報表文件(*.rpt)後,在前臺利用報表控件CrystalReprotViewer,將報表文件加載到頁面實現各種報表。這種把數據源、報表文件、和頁面顯示文件分開獨立實現,不僅豐富了報表顯示樣式和提高了網絡報表生成效率,而且極大地提高了訪問數據的平安性。
(3)用戶口令存儲新問題摘要:不要將實際的口令存儲在數據庫表中,因爲口令直接放在數據庫或文件中存在平安隱患,因此要存儲加密後的口令。使用時,例如當用戶登錄時,對口令加密,然後和數據庫中存放的加密口令進行比較。實現步驟如下摘要:
首先,導入命名空間摘要:%26lt;%@ Import Namespace="System.Web.Security" %%26gt;
其次,編寫加密函數EncrytPwd摘要:
Function EncrytPwd(Pwd as String,PwdFormat as String)
If PwdFormat="MD5" then
'下面一行得到用MD5算法加密後的字符串
EncrytPwd=FormsAuthentication.HashPasswordForStoringInConfigFile(Pwd,"MD5")
'下面一行得到用SHA1算法加密後的字符串
Else if PwdFormat="SHA1"then
EncrytPwd=FormsAuthentication.HashPasswordForStoringInConfigFile(Pwd,"SHA1")
End if
End Function
2.2.2 配置文件web.config 的平安設置
web.config文件是一個簡單的XML文件,專門用於爲應用程序配置系統設定、平安性設定、應用程序設定和會話設定。下面分5個內容介紹平安實踐策略。
(1) 數據庫連接字符串常量摘要:Web應用程序網頁要大量用到數據庫連接,爲了提高程序平安性、通用性和可移植性,在配置文件中設置數據庫連接字符串常量是很好的方法,在應用程序的web.config文件中添加如下語句摘要:

網頁文件使用時,用下列代碼實現數據庫連接摘要:
Dim strConn As String
strConn=ConfigurationSettings.AppSettings("sqlconntion ")'獲取數據庫連接字符串
(2) 認證和授權摘要:HTML表單驗證(Forms Authentication),是向開發人員提供確認客戶憑證並控制訪問權限的技術。在應用程序的web.config文件中添加如下語句摘要:

授權摘要:就是讓用戶擁有有效憑證,答應或拒絕訪問Web應用程序。在web.config中添加如下語句摘要:

(3) 虛擬路徑的設置摘要:不同用戶對不同目錄訪問權限不同,可以設定虛擬目錄來實現

(4) 設置調試模式提高平安策略摘要:默認情況下,錯誤信息保存在棧中。假如開啓調試模式,ASP.NET在運行中發生錯誤時,會顯示錯誤行號,方便調試。可以在頁面或web.config文件中開啓調試模式。例如摘要:

%26lt;%@ page debug=”true” %%26gt;'開啓頁面級調試模式

'開啓應用程序級調試模式
但發佈程序時,要禁用調試模式,否則出錯時,有泄露後臺代碼的隱患。
(5) 頁面出錯處理策略摘要:出錯時轉向統一的出錯頁面,而不必在每個網頁中寫代碼,控制轉向出錯頁面,避免了程序運行期間任何未處理的意外發生時,錯誤頁面代碼泄露或使用戶不知所云的尷尬發生。頁面出錯處理可以應用下列策略實現摘要:


(A)定製出錯網頁

這個設置可以保證當錯誤出現時,本地用戶訪問默認出錯頁,遠程用戶訪問自定義的error.htm網頁。
(B)處理非凡的HTTP請求
對於HTTP錯誤狀態代碼,例如摘要:403禁止,404無法找到,500服務器錯誤等,可以自定義各自的出錯處理頁面。如下所示摘要:



2.2.3 界面設計摘要:代碼分離和自定義控件
(1)代碼分離摘要:將程序代碼和HTML內容分離,不僅能增強頁面的條理性、易讀性和團隊開發的輕易程度,更重要提高網頁平安性。如摘要:
前臺aspx網頁摘要:peixun_base_
xiangmu//
%26lt;%@ Register TagPrefix= "iewc" Namespace="Microsoft.Web.UI.WebControls"
Assembly="microsoft.web.ui.webcontrols" %%26gt;
%26lt;%@ Page Language="vb" AutoEventWireup="false" Codebehind=
"peixun_base_xiangmu/.vb"Inherits="pxb.MUTI"%%26gt;
而後臺的peixun_base_xiangmu/.vb文件,專門編寫代碼,實現代碼和HTML內容分離。
(2)自定義控件摘要:可以根據需要編寫自定義控件,更好地提供可重用的封裝邏輯,在使用自定義控件前,需要將定義它們的類文件編譯成動態庫,即摘要:
vbc /t摘要:library /r摘要:system.dll /r摘要:system.web.dll/out摘要:pxbcontrols.dll control.vb
將編寫好的類文件(.vb)編譯成動態庫(.dll),可以供以後多次使用,由於封裝了邏輯,且生成庫,所以平安性得到保障。
除上述外,必須要重視記錄日誌。日誌文件分系統日誌和用戶自定義日誌。系統日誌,如建立數據庫日誌文件;自定義日誌文件摘要:可以利用global.asax文件的session_onStart()事件和session_onEnd()事件實現自定義日誌文件維護,例如摘要:記錄訪問用戶的登錄名,訪問時間,IP地址等信息,在應用程序根目錄的global.asax文件內添加如下代碼摘要:
%26lt;%@ Import Namespace= "System.IO"%%26gt;
Sub Session_onStart(Sender As Object, E As EventArgs)
'每一位客戶登錄時觸發該事件
sw=New StreamWriter(server.mappath("log/log.txt"),True,Encoding.Default)
'將客戶IP保存到Session中
Session("IP")= Request.ServerVariables("REMOTE_ADDR") sw.Writeline(Now() %26amp; "-用戶" %26amp; Session("IP") %26amp; "進入")
sw.Close
End Sub
Sub Session_OnEnd(Sender As Object, E As EventArgs)
'當每一位客戶超過會話時間沒有和服務器交互,或關閉瀏覽器後觸發該事件
sw=New StreamWriter(server.mappath("log/log.txt "),True,Encoding.Default)
sw.Writeline(Now() %26amp; "-用戶" %26amp;Session("IP") %26amp; "退出")
sw.Close
End Sub
2.3 發佈運行階段摘要:主要考慮如下方面
(1) 關閉調試模式;
(2) 備份轉儲數據庫文件和日誌文件;
(3) 密碼要不斷更新;
(4) 及時打補丁程序。

3總結

綜上所述,基於ASP.NET的Web網絡應用程序開發,在充分利用ASP.NET的平安機制、數據庫平安控制、管理員網絡平安防範意識的基礎上,可以極大提高Web應用程序的平安性能。

參考文獻
[1 [美Steven A.Smith等.用實例學ASP.NET.馬燕,閆立軍等,譯.北京摘要:電子工業出版社,2002.
[2 [美Macro Bellinaso Kevin Hoffman.ASP.NET Web站點高級編程.康博,譯.北京摘要:清華大學出版社,2002.
[3 [美John Kauffman 等. ASP.NET數據庫入門經典. 康博,譯.北京摘要:清華大學出版社,2002.
[4 章立民. 用實例學 Crystal Report for Visual Studio.NET.北京摘要:電子工業出版社,2004.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章