【文章內(nèi)容簡介】
務(wù)器端會創(chuàng)建一個(gè)用戶的私有變量Session(“UserID”)來保存用戶的ID。在本系統(tǒng)的其他模塊,經(jīng)常需要用到此私有變量判斷用戶狀態(tài)是否失效、用戶是否為管理員。最后, 。例程31用戶登錄模塊!include file=!include file=!include file=!include file=%Dim strSQL,objRSSet objRS=()39。取得用戶文件名、密碼Dim UserName,UserPassword39。過濾SQL字符,防止SQL漏洞注入U(xiǎn)serName=ChkSQL(Request(UserName)) ‘使用md5()函數(shù)加密密碼UserPassword=md5(Request(UserPassword))39。在數(shù)據(jù)庫中查找用戶strSQL=SELECT * FROM [UserInfo] WHERE UI_Name_S=39。amp。UserNameamp。39。 strSQL,objConn,1,339。判斷用戶是否存在39。若用戶不存在則通過GetErr()函數(shù)提交并顯示錯(cuò)誤代碼If Or Then Set objRS=Nothing GetErr(3) Else 39。若用戶存在,則檢測用戶密碼的正誤 If objRS(UI_Password_S)UserPassword Then Set objRS=Nothing GetErr(4) End IF 39。判斷用戶是否被鎖定 If objRS(UI_IsLocked_B)=True Then Set objRS=Nothing GetErr(5) End If 39。建立用戶私有變量 =30 Session(UserID)=objRS(UI_ID_N) 39。每當(dāng)有用戶登錄則刷新數(shù)據(jù)庫,判斷是否有自行車的預(yù)訂超時(shí)或超期未還 strSQL=SELECT TAC_ReserveTime_D,TAC_StartTime_D FROM [Tenancy]”amp。_” WHERE TAC_StartTime_D IS NULL strSQL,objConn,1,3 For i=1 To 39。有超時(shí)的預(yù)訂則刪除 If IsNull(objRS(TAC_StartTime_D))=True Andamp。_ DateDiff(h,objRS(TAC_ReserveTime_D),Now())12 Then End If Next strSQL=SELECT * FROM [Tenancy] WHERE TAC_StartTime_D”amp。_” IS NOT NULL AND TAC_EndTime_D IS NULL strSQL,objConn,1,3 Dim MsgUser For i=1 To 39。有超期租賃的則標(biāo)注 If DateDiff(d,DateAdd(d,objRS(TAC_Lease_N),amp。_objRS(TAC_StartTime_D)),Now())=objRS(TAC_Lease_N) Then strSQL=UPDATE [Tenancy] SET TAC_TimeOut_B=True,”amp。_”TAC_MsgUser_B=True WHERE TAC_ID_N=amp。objRS(TAC_ID_N) (strSQL) End If Next 39。跳轉(zhuǎn)回主頁 End If%自行車瀏覽模塊的功能是讓用戶找到自己感興趣的自行車,找到后可以進(jìn)行預(yù)定。實(shí)現(xiàn)后的效果如圖35所示。圖35 自行車流量模塊效果圖此模塊是為了顯示用戶的預(yù)定、租賃關(guān)系與租賃關(guān)系提醒所設(shè)計(jì)的。使用此模塊,用戶可以查看自己預(yù)定了哪些自行車,租了哪些自行車,哪些自行車將要到期、哪些自行車已超過了歸還期限。在此模塊中通過Select Case判斷自行車的狀態(tài)后,再使用If和DateDiff函數(shù)結(jié)合判斷自行車的狀態(tài)是將要到期還是已經(jīng)超期。實(shí)現(xiàn)后的效果如圖36所示圖36 用戶信息模塊設(shè)計(jì)此模塊的設(shè)計(jì)也運(yùn)用了頁面與代碼的分離技術(shù)。用戶可以通過此功能模塊察看和修改自己的資料。如果是管理員的話,則可以修改用戶的狀態(tài)。此模塊的表單域中包含三個(gè)隱含的域:uid、IsModify和ChangeBy。uid傳遞的是用戶ID; ChangeBy是根據(jù)用戶是否為管理員來判斷是否要更新用戶基本信息外的屬性實(shí)現(xiàn)后的效果如圖37。圖37用戶資料管理模塊實(shí)現(xiàn)效果圖 查看用戶租賃關(guān)系模塊設(shè)計(jì)此模塊的功能是讓用戶查看現(xiàn)存的租賃關(guān)系,包括預(yù)訂和租賃。可以得到租期和租金的信息。如果是以管理員身份查看租賃關(guān)系,則可以連接到起租與結(jié)算的頁面,執(zhí)行相應(yīng)的操作。在此模塊中,會通過Session(“UserID”)來讀取數(shù)據(jù)庫中的用戶信息,判斷用戶是否是管理員。?,如果不是管理員則終止操作。而查看用戶租賃關(guān)系模塊是用戶與管理員公用的模塊,會使不是管理員的用戶無法繼續(xù)進(jìn)行操作。此模塊可以計(jì)算出用戶所要支付的實(shí)際租金,便于管理員對租賃收費(fèi)進(jìn)行管理。實(shí)現(xiàn)后的效果如圖38圖38 查看用戶租賃關(guān)系實(shí)現(xiàn)效果圖此模塊的功能是用戶預(yù)訂自行車。當(dāng)用戶預(yù)訂自行車后,預(yù)定的狀態(tài)會保存12小時(shí)。若12小時(shí)內(nèi)用戶沒有去起租自行車,則預(yù)訂會被刪除。如果用戶不是管理員且有超期未還的自行車,則不可以預(yù)訂自行車,直到超期未還的自行車歸還為止。此模塊實(shí)現(xiàn)效果圖如圖39和圖310。圖39 用戶預(yù)定自行車圖310 用戶預(yù)定自行車成功此模塊的作用是注銷用戶的登錄。其原理是結(jié)束用戶的私有變量Session(“UserID”)。%‘結(jié)束用戶私有變量 ‘重定向網(wǎng)頁%第四章 系統(tǒng)通用功能模塊和管理界面 以下是本系統(tǒng)的一些通用文件。 統(tǒng)一格式的頁面頭 統(tǒng)一格式的頁面尾 頁面轉(zhuǎn)換 檢查用戶是否具有管理權(quán)限 根據(jù)錯(cuò)誤代碼提取錯(cuò)誤信息及解決對策 數(shù)據(jù)庫聯(lián)接 用戶密碼加密 自行車類型導(dǎo)航條 輸出操作結(jié)果信息 用戶信息 頁面風(fēng)格INC\ 通用Javascript腳本(1)管理界面的設(shè)計(jì)采用了框架的結(jié)構(gòu),可以根據(jù)Request(“Type”)獲取用戶需要顯示的管理頁面。這樣的設(shè)計(jì)可以使用戶使用清晰明了,能快速找出所要使用的功能。,所在的框架名稱為leftFrame。而mainFrame顯示的是管理選項(xiàng)頁面。在每個(gè)管理界面當(dāng)中均采用!include file=””,這種設(shè)計(jì)是為了檢測用戶是否擁有管理權(quán)限,防止沒有管理權(quán)限的用戶非法篡改系統(tǒng)數(shù)據(jù)。在管理界面中包含這幾個(gè)模塊,系統(tǒng)信息的查看與修改,用戶管理,自行車管理,起租與結(jié)租模塊。第五章 系統(tǒng)要點(diǎn)、難點(diǎn)系統(tǒng)的安全性,在傳統(tǒng)經(jīng)典的C/S架構(gòu)中就已經(jīng)得到了充分的重視,自從電子商務(wù)誕生以來,新興的B/S架構(gòu)系統(tǒng)安全性也成為了一個(gè)新興的問題。安全性問題的產(chǎn)生,可能很多讀者認(rèn)為多與網(wǎng)絡(luò)系統(tǒng)與服務(wù)器有關(guān),類似于DoS之類的名詞耳熟能詳。殊不知在系統(tǒng)開發(fā)的過程中,卻隱藏著更多更具有破壞性的安全問題。SQL漏洞注入是一個(gè)很簡單,同時(shí)又很復(fù)雜的問題。簡單的說,SQL漏洞注入是通過瀏覽器提交特殊的代碼,從而收集服務(wù)器、程序或數(shù)據(jù)庫信息。而獲取數(shù)據(jù)庫中的信息,又往往是實(shí)行SQL漏洞注入者的主要目的。在程序當(dāng)中,很可能出現(xiàn)類似于a href=?id=1顯示用戶/a這樣的html代碼。如果把“?id=1”改成“?id=1 and ui_isadmin_b=true”,并在瀏覽器地址欄里提交,如果程序中沒有相應(yīng)的措施,那么這個(gè)SQL漏洞注入就算是成功了。在SQL語言當(dāng)中,單引號“’”是格外需要注意的。利用好單引號,可以構(gòu)造出極具攻擊性漏洞注入,例如在程81的文本框中輸入“1 or ui_name_s like 39。%%39?!?,那么程序就會將所有用戶都羅列出來。所以在此案例中,使用Replace函數(shù)過濾單引號是非常常見的。大多數(shù)故意入侵,都是針對程序漏洞進(jìn)行的。前節(jié)的SQL漏洞注入。對于入侵的防范,大體可以依據(jù)以下幾條消除:(1)在頁面中傳遞數(shù)據(jù)時(shí),盡量使用數(shù)值類型的數(shù)據(jù)傳遞,因?yàn)閿?shù)值類型的數(shù)據(jù)比較好判斷;(2)在程序設(shè)計(jì)時(shí),判斷出非法的數(shù)據(jù)類型后,要及時(shí)終止程序的運(yùn)行并提交錯(cuò)誤,最好還能