摘 要:網(wǎng)絡(luò)考試系統(tǒng)在給我們帶來準(zhǔn)確和快捷的同時,也存在一定的安全隱患。本文針對基于ASP的護(hù)士執(zhí)業(yè)資格網(wǎng)絡(luò)模擬考試系統(tǒng),通過用戶身份驗證、MD5加密、防止SQL注入攻擊、屏蔽鼠標(biāo)右鍵等手段進(jìn)行系統(tǒng)安全性設(shè)計。
關(guān)鍵詞:ASP 網(wǎng)絡(luò)考試系統(tǒng) 護(hù)士執(zhí)業(yè)資格 安全性
中圖分類號:G712文獻(xiàn)標(biāo)識碼:A文章編號:1674-098X(2012)03(a)-0043-01
考試是學(xué)校教學(xué)過程中的一個必要的評價環(huán)節(jié),隨著計算機(jī)技術(shù)和網(wǎng)絡(luò)通訊技術(shù)的不斷進(jìn)步,網(wǎng)絡(luò)化考試逐漸成為一種重要的考試方式。網(wǎng)絡(luò)考試系統(tǒng)能夠充分發(fā)揮題庫的作用,使教師可以均衡、全面、及時地組織試卷、統(tǒng)計成績、分析考試結(jié)果,具有準(zhǔn)確性、及時性、公正性、靈活性和方便性等特點。
由于網(wǎng)絡(luò)考試系統(tǒng)的特殊性,數(shù)據(jù)的安全與保密就顯得特別重要。保密性是指用戶在網(wǎng)絡(luò)上的所有信息應(yīng)有一定的保密度,不同的用戶類型之間的內(nèi)容是相互保密的。安全性是指用戶參加的每一次活動都是一個安全的過程,服務(wù)器能夠跟蹤所有用戶的動作。為了確保系統(tǒng)的安全性和保密性,主要通過下列五種途徑予以實現(xiàn)[1]:
1 用戶身份驗證
凡進(jìn)入護(hù)士執(zhí)業(yè)資格網(wǎng)絡(luò)模擬考試系統(tǒng)的用戶,都要通過身份驗證。而且根據(jù)用戶身份的不同,分別進(jìn)入不同界面,具有不同的操作權(quán)限。系統(tǒng)支持按權(quán)限進(jìn)行操作,以確保數(shù)據(jù)的公共性和私有性。不允許用戶執(zhí)行非法操作,防止用戶對系統(tǒng)有意或無意的破壞,對一些比較重要的數(shù)據(jù),系統(tǒng)設(shè)置為只有更高權(quán)限的人員才可讀取或操作,系統(tǒng)安全保密性較高。同時,為了有效防止某些特定注冊用戶用程序暴力破解方式進(jìn)行不斷的登錄嘗試,系統(tǒng)還在登陸界面中加入了驗證碼。
2 MD5加密
MD5的全稱是Message-Digest Algorithm 5,在20世紀(jì)90年代初由MIT的計算機(jī)科學(xué)實驗室和RSA Data Security Inc發(fā)明,經(jīng)MD2、MD3和MD4發(fā)展而來。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被“壓縮”成一種保密的格式。[2]
系統(tǒng)采用MD5加密技術(shù)對用戶密碼進(jìn)行加密,用戶登錄的時候,程序把用戶輸入的密碼計算成MD5值,然后再去和數(shù)據(jù)庫中保存的MD5值的密碼進(jìn)行比較,而程序本身并不“知道”用戶的密碼是什么。
3 防止SQL注入攻擊
所謂SQL注入攻擊,是指利用提交特殊地址將ASP中引用的正常SQL語句和入侵者所需要的SQL語句一并執(zhí)行,使入侵者達(dá)到繞過密碼驗證入侵系統(tǒng)的目的。
防范SQL注入攻擊的方法是禁止提交特殊字符(如or、and、“、”等)。ASP的傳輸數(shù)據(jù)分為Get和Post兩種,Get是通過將數(shù)據(jù)添加到URL后提交的方式,而Post是利用郵寄信息數(shù)據(jù)字段將數(shù)據(jù)傳送到服務(wù)器。[3]
IIS是以字符串的形式將Get請求傳給ASP.dll的,在將數(shù)據(jù)傳遞給Request.QueryString之后,ASP解析器會解析出Request.QueryString的信息,然后根據(jù)“”來分出各個數(shù)組內(nèi)的數(shù)據(jù)。所以,只要過濾掉特定的字符就可阻止注入攻擊,防止Get方式注入的代碼如下:
<% dim sql_leach,sql_leach_0,Sql_DATA
sql_leach = \"',and,exec,insert,select,delete,update,count,*,%,chr,mid,master,truncate,char,declare\"
sql_leach_0 = split(sql_leach,\",\")
if Request.QueryString<>\"\" Then
for each SQL_Get In Request.QueryString
for SQL_Data=0 To Ubound(sql_leach_0)
ef instr(Request.QueryString(SQL_Get),sql_leach_0(Sql_DATA))>0 Then
response.write \"請不要進(jìn)行SQL注入!\"
response.end
end if
next
next
end If %>
接著過濾Post提交方式的注入,因為request.form也是以數(shù)組形式存在的,所以只要對它再進(jìn)行一次循環(huán)判斷就可以了。防止以Post方式注入的ASP代碼如下:
<% if Request.Form<>\"\" then
for Each Sql_Post in Request.Form
for SQL_Data=0 to Ubound(sql_leach_0)
if instr(Request.Form(Sql_Post),sql_leach_0(Sql_DATA))>0 Then
response.write \"請不要進(jìn)行SQL注入!\"
response.end
end if
next
next
end if %>
這樣,兩種注入都被禁止了。
4 屏蔽鼠標(biāo)右鍵
為了避免右鍵菜單的部分操作對考試界面安全性和保密性的影響,護(hù)士執(zhí)業(yè)資格網(wǎng)絡(luò)模擬考試系統(tǒng)通過在ASP中應(yīng)用JavaScript語言來對鼠標(biāo)右鍵進(jìn)行屏蔽。其代碼如下:
5 防止用戶刷新頁面
在考試過程中,由于有考試時間限制,為了防止用戶利用刷新網(wǎng)頁的方法刷新考試時間,從而造成考試的不合理性,系統(tǒng)在設(shè)計過程中著重設(shè)計了防止用戶刷新的操作。在ASP網(wǎng)頁中,此功能是用以下代碼實現(xiàn)的:
response.expires=0
response.addHeader(\"pragma\",\"no-cache\")
response.addHeader(\"Cache-Control\",\"no-cache, must-revalidate\")
參考文獻(xiàn)
[1]王萍萍,李曉娜,孫更新.ASP+Dreamweaver動態(tài)網(wǎng)站開發(fā)[M].北京:清華大學(xué)出版社.2008.
[2]劉清懷,龐婭娟.ASP網(wǎng)絡(luò)開發(fā)實例自學(xué)手冊[M].北京:人民郵電出版社.2008.
[3]張華.精通ASP疑難解析與技巧300例[M].北京:北京鐵道出版社.2007.