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