【摘要】目前,由于網絡課程的開發過程很少考慮網絡安全的要素,或者考慮并不全面,從而對網絡安全的運行產生很大的安全威脅。該文通過考察基于asp.net設計的網絡課程架構,分析了各層次間可能存在的安全隱患,提出解決問題的方案,旨在從網絡安全的角度來考慮網絡課程的設計。
【關鍵詞】asp.net;網絡課程;安全設計
【中圖分類號】G434 【文獻標識碼】B【論文編號】1009—8097 (2008) 01—0103—04
一 問題的提出
目前,隨著因特網的飛速發展,網上教學已經成為高等教育領域中日益流行的教學模式。隨著國家級精品課程等一大批網絡課程陸續投入使用,網絡課程的發展進入了空前繁榮的階段。網絡課程以它獨有的優勢正在受到前所未有的關注,可以預見今后將會有更多的課程平臺投入使用。在這樣的形式下,一個突出的問題擺在我們面前,在目前完全開放的網絡平臺中,對于網絡課程的開發,系統的安全設計占有很重要的地位。如果一旦網絡課程平臺遭到攻擊,那么其教學功能受到很大影響:輕則網頁出現亂碼、格局出現混亂、網頁顯示速度變慢,重則用戶的帳號或者密碼失效,甚至可能會出現更為嚴重的數據庫文件被破壞。無論出現哪種情況,其對網路課程平臺的威脅都是不可忽視的,它會影響網絡課程的正常運轉從而造成人力、物力和財力極大浪費。
二 基于asp.net設計的網絡課程構架的分析
我們知道網頁有動態與靜態之分。動態網頁泛指能夠運用數據庫技術或者通過腳本語言編程實現用戶與環境之間交互的網頁。靜態網頁是指不需要用戶與環境的交互,簡單地呈現文本或者圖像信息的網頁。網絡課程正是通過這兩種形式網頁的相互結合呈現資源和組織教學活動的,如下圖所示。
網絡課程的活動設計(如BBS討論組、學習標簽、協作小組、內容搜索等等)大多都要通過語言編程運用數據庫技術來實現,如下圖所示:


網絡課程按照功能模塊劃分,基本上可以分為如上圖所示的模塊,根據模塊的功能不同需要編寫不同的后臺代碼,在﹒net中,頁面的呈現大多數都依靠窗體,在Page_Load事件中,通過編寫程序把信息的放入窗體(如:Label窗體、DataGrid窗體、DataList窗體)這樣就在頁面加載的時候呈現了信息。事件的觸發一般都是運用Button窗體事件來提交輸入值,或者調用功能模塊函數,后臺代碼與數據庫的連接,要依靠ADO數據驅動程序,如訪問SQL Server就要調用編寫using System.Data.SqlClient,然后建立SqlConnection對象實例,如SqlConnection 實例名= new SqlConnection (連接參數)。
由于Asp﹒net 是編譯執行的, 后臺代碼完全在服務器端運行, 因此Asp﹒net應用是比較安全的, 但是卻不能認為通過前臺頁面訪問數據庫是完全安全的。后臺代碼只是執行沒有程序錯誤的語句,操作者可以在前端輸入合法的值,導致網站不期望的結果。
目前針對asp.net技術的開發的網絡課程,入侵者一般會通過如下圖所示侵入方式:

入侵者在入侵之前都會通過不同的手段,想方設法的收集盡可能多的信息,入侵者始終都會相信這樣一句:“無論目標網絡的規模有多大、安全指數有多高,只要是人類參與設計的網絡就必然存在著人為因素,而任何人為因素都有可能導致網絡設計的缺陷” 。實事也證明,如果入侵者獲得的信息越多,他們發現的缺陷也就越多,侵入網絡的可能性就越大。入侵者為了用戶名/密碼,會在程序中嘗試不同的密碼(暴力攻擊)或者竊聽密碼(安裝探測器)來獲得用戶的登錄憑證。由于開發者操作的失誤,或者考慮不全面,對程序文件或者其它受保護的文件沒有選擇合適的用戶驗證方式,導致入侵者很順利得就獲得了文件的權限。入侵者獲得文件權限后,就能對文件進行操作,任意修改網絡課程站點。用戶與服務器的操作一般是通過向文本框中輸入數據,如果在文本框中輸入腳本語言,服務器沒有過濾文本框內容就直接顯示文本框中的內容,瀏覽器就會執行腳本語言,這種腳本語言一般是跨站點腳本語言,執行跨站點腳本語言會有一定的危害:如盜取會話標識、鏈接到其它危害網站上等等。SQL是相對于數據庫來說的,站點與數據庫連接,用戶通過web程序訪問數據庫,如從數據庫查詢數據、向數據庫中插入數據,都要操作數據庫,SQL就是向數據庫中輸入了不期望的數據,導致數據庫的執行異常。
三 問題的解決
開發好的網絡課程,不僅要在在課程的教學設計、學習資源、頁面結構和顏色搭配上下功夫,也要注重網絡課程的應用程序的執行速度和安全性。遠程用戶與服務器(學習者與網絡課程)構成了B/S網絡模式,網絡管理員應該重視上述的安全隱患,并且懂得如何防止這些入侵行為,從而為網絡課程的安全運行構建良好的環境。
由于靜態技術的沒有涉及到交互,只要通過編寫合理的html代碼和環境安全設計就能夠達到防御威脅的要求。環境安全設計主要考慮上述的入侵行為,通過更新服務器安全補丁或者其它的安全措施(如共享文件的設置、關閉不需要的服務或端口、及時更新防火墻等等)。本文著重考慮的是基于asp.net技術的網絡課程的動態技術的安全技術。通過分析構建合理的代碼安全設計(優化),建立安全的應用程序。
網絡課程的開發者可以從下面構建安全的asp.net技術網絡課程。
1 安全管理密碼:學習者通過登錄帳號才能進行交流學習或者資源的共享,帳號(或者是用戶名)一般都可以公布于課程頁面中,然而密碼就是管理用戶的安全中心機制,因此可以通過對密碼的一系列的設置策略來防止密碼被破解。
(1) 密碼設置:密碼最小長度設定為8位字符,一般不要限制最大密碼長度;且密碼應該提示用戶采用多種字符進行組合,包括小寫字母、大寫字母、數字和標點符號、空格等。網絡課程的開發人員可以通過使用RegularExpressionValidator控件或CustomValidator控件,可以通過調用PasswordCherk函數來檢查或者限制用戶密碼的強弱。
(2) 密碼存儲:密碼的存儲是很重要的,如果存儲不當,將可能會被盜取。我們可以把密碼存儲為普通文本或把密碼進行加密,存儲為加密的密文。也可以創建密碼哈希,把哈希表存儲在數據庫中。這種方式最為安全,單向的密碼哈希致使被別人竊取,也不容易破解,因為哈希是不可逆運算,密碼的破解需要哈希匹配。當用戶登錄時,對用戶輸入的密碼運行哈希函數,然后將所得到的哈希和數據庫里的哈希進行比較,比較成功,才能登錄成功。
(3) 更改密碼:通過電子郵件和密碼問題的方法,加強密碼的安全修改。用戶只有回答正確的密碼問題,填寫正確的電子郵件后,才把密碼發送到用戶郵箱里,密碼郵件不應該說明帳號和網址。得到新密碼后,用戶在登錄時,還得要回到密碼問題,輸入正確答案,才能登錄成功。
2 驗證用戶及文件授權:Web登錄屏幕就像一個關卡,強迫用戶提供一個有用的用戶名和密碼來證明他們的身份。驗證用戶,確認用戶的身份非常重要,常見的驗證方法如下表:[5]

使用表單驗證(Forms)只適用于由asp.net管理的資源。如果使用表單驗證未授權的用戶訪問asp.net管理的資源,則會轉向到登錄頁面,可以通過設置非asp.net資源的映射,對非asp.net資源進行保護。一般來說,對于SQL數據庫、其它數據庫文件,使用自定義驗證時,選用表單驗證最為安全。
使用Windows驗證時,必須打開Internet Service Manager,為受保護的文件選擇相關屬性。Windows驗證需要用戶為瀏覽器輸入用戶名和密碼,才能訪問站點,目的是對整個站點的保護。
Passport驗證適合于用戶自定義或不存儲個人信息的web站點。它是微軟在1999年發布的,主要針對Web的單點登錄和電子商務解決方案。
文件授權是通過設置web文件適當的訪問控制列表(ACL)以允許訪問文件資源的過程。文件授權可以通過IIS管理權限進行設置外,還可以通過URL授權和代碼授權。URL授權是一種用來控制基于用戶、角色、資源或所用HTTP謂詞訪問機制,通過精確定于誰可以訪問什么內容,以及如何訪問。URL授權是給應用程序強制實施最少特權的有效方法,通過編輯要保護的應用程序的web.config文件,保護相對應的文件。基于代碼的授權允許對整個應用程序實施細致的安全檢查。
3 管理用戶會話:在進行數據交互時,往往通過會話來實現。會話跟蹤客戶端和服務器之間的完整交互,表現出客戶端和服務器之間的無縫連接。
Asp.net 支持3種在服務器上存儲會話狀態的方法:[5]
(1) 在進程中:編輯web.config文件中<SessionState mode=“InProc”cookieless=“1”timeout=“15”/>,還要禁止asp.net狀態服務。
(2) Asp.net狀態服務:實際上是一個小型的HTTP服務器。編輯web.config文件中<SessionState mode=“StateServer”stateConnetionString=“tcpip=*”cookieless=“1”timeout=”15”/>
(3) Sql Server:把會話存入數據庫,編輯web.config文件中<SessionState mode=“StateServer”stateConnetionString=“data source=*”;
trusted_Connetion =* cookieless=“1”timeout=“15”/> (cookieless選項是說明不使用會話cookie,*代表地址)
如果使用會話cookie,可以通過cookie的安全屬性(domain、path、expires、secure、value)來限制攻擊范圍,加強會話安全。
在使用會話時,要注意設置會話的終止條件,沒有終止條件的會話可能面臨風險,最佳的終止會話的條件是:在特定空閑時間長度后終止;在發布會話后的某個絕對時間后終止;在使用特定次數后終止。
4 編寫安全代碼:惡意用戶通過web應用程序本身的代碼的缺陷操縱程序輸入,使服務器泄露數據或允許訪問未授權的文件。這些用戶還可以控制服務器執行預先設定的程序代碼。我們可以通過一下措施提高代碼的安全性:
(1) 防御惡意代碼的輸入:用戶輸入的數據一般都存儲在變量里,為了安全,首先要把輸入的數據存于變量通過過濾函數進行檢測,以確定可以安全使用。確保每次輸入都要存入沒有被更改的變量,永遠不要用原始的用戶輸入進行程序操作。變量的使用要明確變量的類型,通過類型在一定的程度上可以限制用戶的輸入。變量的引用要顯式引用,例如:如果要引用表單usename,在程序里又有查詢字符串usename,那么對于request(“usename”),程序會先引用查詢字符串中的usename,因為,對于request對象,asp.net依次查找queryString,form,cookies,clientCertificate和serverVariables集合已發現匹配,所以,在引用代碼中,使用顯式非常重要。
(2) 驗證所有用戶的輸入:代碼中有很多可能被用戶輸入影響的操作,如數據類型的不匹配可能導致代碼無法編譯運行;輸入shell命令執行系統命令等等。因此,我們可以通過檢查輸入值的數據類型、字符串長度、格式;還可以通過模式匹配,如正則表達式匹配合格輸入,阻塞有害字符或字符串等方法來驗證用戶的輸入。
(3) 利用asp.net中強大的錯誤處理功能可以阻止攻擊者非法的程序操作。例如執行一條數據庫查詢,查找特定用戶的紀錄,期望匹配的是一條數據,但是如果返回的查詢記錄不止一條,就有應該懷疑該操作的合法性。我們可以對用戶給出異常提示并轉向特定的錯誤頁面后返回限定的信息。
5 編寫安全的數據訪問程序:在放置數據庫文件時,要考慮數據庫存放的位置。一般來說,web服務器應該與數據庫服務器放在不同的主機上。由于某些原因,不得不把兩者放到同一主機時,我們應該審查網絡拓撲和網絡安全,設計合理的防火墻布局,對數據庫文件的訪問提供最少權限,限制非法用戶的訪問。
(1) 連接到數據源:SQL數據庫提供連接的兩種驗證方式,一種是windows驗證,另一種是sql驗證。Windows驗證比Sql驗證安全,因為windows驗證不需要通過網絡存儲用戶名和密碼且無須在連接字符串中存儲。但是,有些防火墻不支持Windows驗證,那么只能使用Sql驗證了。使用Sql驗證要注意加密連接字符串。無論選擇哪一種驗證方式,都要注意使用戶擁有最小特權,仔細地配置用戶讀寫權限。
(2) 防止SQL注入:SQL注入就是用戶通過輸入Sql命令導致數據庫運行破壞或者危險。可以通過轉義字符或者使用存儲過程來防止sql注入。建議使用存儲過程和SqlParamter集合,因為,存儲過程比結構化Sql語句執行速度快,而且它本身就有安全上的優勢,與SqlParamter集合的結合使用,把輸入的字符自動轉為文本字符,還可以通過SqlParamter集合中的類型要求和類型長度來防止用戶的非法輸入 即使惡意用戶知道了sql參數,卻無法通過存儲過程知道表名或通過存儲過程來修改字段名。
(3) 安全的sql代碼:通過編寫有安全意識的代碼,意在減少或消除代碼漏洞,從數據庫獲取需要的最少數據,防止泄露過多數據信息。盡量使用“select”
字段名“from ”而不要使用“select * from ”語句,因為“*”是通配符,存在潛在危險。檢查查詢返回的結果集的期望屬性,通過輸入值和返回值的匹配檢查是否正確操作。
總之,本文通過介紹一些威脅的產生和安全技術,探討了構建一個安全的web網絡課程應該考慮的問題。安全技術伴隨著入侵技術的發展而不斷發展的,不可能有一勞永逸的技術。所以,筆者希望web技術人員能夠理解安全技術的精髓,在安全維護中做到舉一反三,嚴格地遵守安全技術的規范編寫代碼,為系統的運行提供一個安全的web環境。其實,這些安全技術同樣適合其它的虛擬社區的安全構建,希望本文能夠給其它的web應用程序的安全構建提供借鑒意義。
——————————
參考文獻
[1]周長海等編.網絡課程制作基礎[M].武漢:華中科技大學出版社.2006.
[2]羅兵,顧雁宏,詹文軍著.精通ASP.NET程序設計[M].北京:清華大學出版社.2006.
[3]龔玲,張云濤著.黑客攻防演習[M]. 北京:電子工業出版社.2007。
[4]鄧吉,羅詩堯,曹軼著.黑客攻防實戰入門[M]. 北京:電子工業出版社.2007.
[5]良忠編譯.拒絕黑客—asp.net web 應用程序安全剖析[M].北京:電子工業出版社.2005.
The Safety Design of Web Courses Based on ASP.NET
DENG Meng-hong MA Zhi-qiang
(Education Technology and Communication College The Northwest Normal University,Lanzhou,Gansu, 730070,China)
Abstract:At present, the development of the internet courses rarely consider the elements of network security, or not considered comprehensive, which threat network security and the operation of security. By studying design which based on asp.net web-based curriculum framework, this article analyses the potential safety problems and give some solutions.The author hopes when people begin to design web-based course, they should consider network security .
Keywords:asp.net; Web-based Course; Safety Design