李光燦 楊志琴
DOI:10.19850/j.cnki.2096-4706.2024.01.008
收稿日期:2023-05-19
摘? 要:麗江文化旅游學(xué)院在線教育評價系統(tǒng)是基于Web技術(shù),依托微信公眾平臺,實現(xiàn)PC端、移動端互聯(lián)互通的自適應(yīng)系統(tǒng)。系統(tǒng)設(shè)計的目的是使學(xué)生可通過移動端設(shè)備對自己本學(xué)期所上課程進行綜合評價,并以百分制的形式自動匯總評價結(jié)果。相應(yīng)的管理部門可隨時通過移動端設(shè)備訪問查看評價結(jié)果,系統(tǒng)會將學(xué)生教育評價結(jié)果反饋給教師及相關(guān)部門,以此來提升教學(xué)效果。該系統(tǒng)采用ASP.NET技術(shù)設(shè)計開發(fā),該文主要闡述開發(fā)系統(tǒng)過程中用到的幾個關(guān)鍵技術(shù)。
關(guān)鍵詞:教育評價系統(tǒng);加密技術(shù);SQL查詢;關(guān)鍵技術(shù)
中圖分類號:TP311.1? 文獻標(biāo)識碼:A? 文章編號:2096-4706(2024)01-0039-06
Research on the Key Technologies of the Development of Online Education Evaluation System
—Taking the Online Education Evaluation System of Lijiang Culture and Tourism College as an Example
LI Guangcan, YANG Zhiqin
(Lijiang Culture and Tourism College, Lijiang? 674199, China)
Abstract: The online education evaluation system of Lijiang Culture and Tourism College is an adaptive system based on web technology and relying on the WeChat public platform to achieve PC and mobile connectivity. The purpose of system design is to enable students to comprehensively evaluate their courses taken this semester through mobile devices, and automatically summarize the evaluation results in a percentage system. The corresponding management department can access and view the evaluation results through mobile devices at any time, and the system will provide feedback on the student education evaluation results to teachers and relevant departments to improve teaching effectiveness. The system adopts ASP NET technology for design and development, this paper mainly elaborates on several key technologies used in the development process of the system.
Keywords: educational evaluation system; encryption technology; SQL query; key technology
0? 引? 言
麗江文化旅游學(xué)院在線教育評價系統(tǒng)主要包括以下幾個模塊:登錄模塊、評價指標(biāo)設(shè)置模塊、學(xué)生評價模塊、學(xué)生評價信息展示模塊、學(xué)生評價信息管理模塊、綜合統(tǒng)計分析模塊。在這些模塊的開發(fā)過程中引用一些關(guān)鍵技術(shù),用以保障系統(tǒng)的正常運行。
1? 數(shù)據(jù)加密技術(shù)
數(shù)據(jù)系統(tǒng)的首要任務(wù)就是保證數(shù)據(jù)的安全。為防止數(shù)據(jù)泄露,在開發(fā)麗江文化旅游學(xué)院在線教育評價系統(tǒng)時對各模塊使用了不同的數(shù)據(jù)加密技術(shù)。
1.1? 登錄數(shù)據(jù)加密
無論是學(xué)生評價,還是后臺管理,第一步都是要登錄系統(tǒng)。在登錄系統(tǒng)時為確保登錄數(shù)據(jù)安全,防止被人以抓包方式惡意篡改登錄數(shù)據(jù),需要對登錄數(shù)據(jù)進行加密處理。
登錄數(shù)據(jù)包括用戶名和密碼。系統(tǒng)是基于Web技術(shù)開發(fā)的,因此在客戶端與服務(wù)器通信過程中不能以明文方式直接傳遞用戶名和密碼。HTTP協(xié)議是無狀態(tài)的協(xié)議,采用傳統(tǒng)的對稱加密技術(shù)無法將私鑰逐一發(fā)送給客戶端,因此在數(shù)據(jù)傳輸過程中不能使用對稱加密?;诖?,麗江文化旅游學(xué)院在線教育評價系統(tǒng)采用RSA非對稱加密方式對登錄數(shù)據(jù)進行處理。
非對稱加密廣泛用于Web數(shù)據(jù)安全中,與對稱加密不同的是,非對稱加密公鑰向所有客戶端公開,私鑰存儲在服務(wù)器端,客戶端使用公鑰對數(shù)據(jù)進行加密然后通過網(wǎng)絡(luò)進行傳輸,服務(wù)器端接收到數(shù)據(jù)后使用私鑰對數(shù)據(jù)進行解密最后得到原始數(shù)據(jù)。通過C#代碼實現(xiàn)的登錄數(shù)據(jù)加密過程如下:
1)客戶端通過公鑰對登錄用戶名及密碼進行數(shù)據(jù)加密
function encrypt() {
//公鑰已經(jīng)在網(wǎng)頁加載中存到客戶端
var PUBLIC_KEY = '<%=ViewState["my"] %>';
var encrypt = new JSEncrypt();
encrypt.setPublicKey(PUBLIC_KEY);
//加密用戶名及密碼
$("#sfzh").val(encrypt.encrypt($("#txt_sfzh").val()));
$("#xh").val(encrypt.encrypt($("#txt_xh").val()));
}
加密后的數(shù)據(jù)以POST方式提交到服務(wù)器端,借助抓包工具可查看相應(yīng)的數(shù)據(jù)加密結(jié)果,如圖1所示。
2)服務(wù)器端通過私鑰解密客戶端提交的數(shù)據(jù)
//接收POST方式提交的客戶端數(shù)據(jù)
stringdata_sfzh = Request.Params["sfzh"];
stringdata_xh = Request.Params["xh"];
//通過私鑰解密數(shù)據(jù)
try
{
stringsy = UtilityHelper.RSA.RSAPrivateKeyJava2DotNet(DB.sy_java);
stringsfzh = UtilityHelper.RSA.RSADecrypt(sy, data_sfzh);
stringxh = UtilityHelper.RSA.RSADecrypt(sy, data_xh);
}
catch (Exception ex)
{
Response.Write("");
}
整個解密過程被封裝在UtilityHelper類中,各模塊可通過類名隨時調(diào)用該類的方法以實現(xiàn)數(shù)據(jù)加密或解密。
通過RSA非對稱加密可保證傳輸過程中登錄數(shù)據(jù)不被篡改,確保數(shù)據(jù)安全可靠。
1.2? 參數(shù)加密技術(shù)
Web技術(shù)中客戶端與服務(wù)器端的交互往往需要加入不同的參數(shù)才能實現(xiàn)。參數(shù)傳遞主要通過POST和GET方式實現(xiàn),麗江文化旅游學(xué)院在線教育評價系統(tǒng)中對這兩種參數(shù)傳遞方式進行了數(shù)據(jù)加密,確保參數(shù)請求和接收的一致性,防止惡意偽造參數(shù)調(diào)用相關(guān)接口獲取非法數(shù)據(jù)。
在線教育評價系統(tǒng)使用的參數(shù)加密技術(shù)是MD5加密技術(shù)。MD5信息摘要算法(MD5 Message-Digest Algorithm)是一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生一個128位(16字節(jié))的散列值(Hash Value),用于確保信息傳輸?shù)耐暾?。MD5由美國密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計并于1992年公開,用以取代MD4算法。這套算法的程序在RFC 1321標(biāo)準(zhǔn)中加以規(guī)范。
在線教育評價系統(tǒng)利用了MD5加密不可逆的特性,在進行數(shù)據(jù)請求時,將所有請求參數(shù)按照一定的規(guī)則進行組合,然后再加入一個私鑰,再將二者組合得到一個新的字符串,將該字符串進行MD5加密得到一個32位隨機字符串。我們將這個32位隨機字符串與其他參數(shù)一并提交到服務(wù)器端。服務(wù)器端在接收到所有參數(shù)后,也會按照同樣的規(guī)則將參數(shù)進行組合(32位隨機字符串除外),組合后再加入同樣的私鑰得到一個新的字符串,將該字符串進行MD5加密后得到一個32位隨機字符串。將這個隨機字符串與接收到的隨機字符串進行比較,二者相等說明參數(shù)未被修改,二者不相等則說明參數(shù)被修改過。
通過這個方法能夠確保所有接收到的參數(shù)與客戶端的參數(shù)一致,從而確保系統(tǒng)數(shù)據(jù)的安全。C#中實現(xiàn)代碼如下:
//在提交參數(shù)時生成sign
ViewState["timestamp"] = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string md5src = Session["xh"] + ViewState["timestamp"].ToString() + DB.key;
ViewState["sign"] = md5.md5jm(md5src, 32);
客戶端通過POST方式提交數(shù)據(jù),以明文方式將數(shù)據(jù)傳輸至服務(wù)器端,參數(shù)界面如圖2所示。
圖2? 使用MD5加密技術(shù)生成的sign值
服務(wù)器端對接收到的參數(shù)進行處理,比較二者的MD5值是否相等。
//接收客戶端傳遞的參數(shù)
stringxh = context.Request.Form["xh"];
string sign = context.Request.Form["sign"];
string timestamp = context.Request.Form["timestamp"];
//驗證接收到的參數(shù)中sign是否與服務(wù)器端計算的sign值相等
stringsign_yz = md5.md5jm(xh +timestamp+ DB.key, 32);
if (sign_yz!= sign)
{
Response.Write("");
}
else
{
……
}
2? 防SQL注入技術(shù)
SQL注入是指Web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性及完整性不進行判斷或過濾不嚴(yán)格,攻擊者利用Web應(yīng)用程序中事先定義好的查詢語句在其結(jié)尾處添加額外的非法SQL語句,在管理員毫不知情的情況下進行非法操作,以此欺騙數(shù)據(jù)庫服務(wù)器執(zhí)行非授權(quán)SQL語句,達到獲取數(shù)據(jù)信息或破壞數(shù)據(jù)庫的目的。
例如,我們在登錄時需要查詢數(shù)據(jù)庫中是否存在用戶名為aa和密碼為123456的數(shù)據(jù),SQL語句如下:
select * from user_table where username='aa' and password='123456 '
通常該語句會被正常執(zhí)行并查詢到結(jié)果,但如果輸入的用戶是'or 1 = 1 -- and password=',SQL語句變成了:
select * from user_table where username=''or 1 = 1 -- and password='' and password='123456'
服務(wù)器執(zhí)行該語句時,由于SQL語言的語法規(guī)定“--”為注釋標(biāo)記,“--”后面的語句將不被執(zhí)行,1=1這一條件永遠成立,因此該語句的含義變成了“查詢所有user_table表中的數(shù)據(jù)”。由于where條件永遠都是成立的,也就意味著沒有條件。
這只是SQL注入中最基本的方式,就是利用SQL語句的特性,通過篡改正常語句來達到某種目的。
在開發(fā)麗江文化旅游學(xué)院在線教育評價系統(tǒng)過程中對SQL語句進行了防注入防范,方法及步驟如下:
1)通過過濾關(guān)鍵詞方法防范。SQL語句中有一些關(guān)鍵詞是不能用作變量的,SQL注入要實現(xiàn)某種目的必然會帶有某些關(guān)鍵詞,只要是了解SQL注入原理就能對其進行一一防范。我們創(chuàng)建了一個SqlKey類,它的作用是過濾SQL中的關(guān)鍵詞。
publicclassSqlKey
{
privateHttpRequest request;
//羅列出要過濾的關(guān)鍵字
privateconststringStrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|execmaster|netlocalgroupadministrators|net user|""|or|and";
privateconststringStrRegex = @";|,|(|)|[|]|}|{|@|*|!|'";
……
//檢查過濾GET請求
publicboolCheckRequestQuery()
{
if (request.QueryString.Count != 0)
{
//若URL中參數(shù)存在,逐個比較參數(shù)。
foreach (string iinthis.request.QueryString)
{
// 檢查參數(shù)值是否合法。
if (i == "__VIEWSTATE") continue;
if (i == "__EVENTVALIDATION") continue;
if (CheckKeyWord(request.QueryString[i].ToString()))
{
returntrue;
}
}
}
returnfalse;
}
//檢查過濾POST請求
publicboolCheckRequest()
{
if (request.Form.Count> 0)
{
//遍歷提交的表單,逐個比較所有參數(shù)是否合法
foreach (string iinthis.request.Form)
{
if (i == "__VIEWSTATE") continue;
if (i == "__EVENTVALIDATION") continue;
//調(diào)用自建方法判斷提交的表單項的值是否正常
if (CheckKeyWord(request.Form[i]))
{
//檢查到存在疑似注入的SQL關(guān)鍵字
returntrue;
}
}
}
returnfalse;
}
}
SqlKey類封裝了相應(yīng)過濾數(shù)據(jù)的方法,可對POST、GET及提交的表單數(shù)據(jù)進行檢驗,如果提交的數(shù)據(jù)中含有設(shè)定的關(guān)鍵詞,則會彈出警告窗口并將頁面引向設(shè)置好的頁面中去,效果如圖3所示。
整個系統(tǒng)中通過POST、GET方式提交的數(shù)據(jù)有若干處,不必在任何需要使用數(shù)據(jù)過濾的地方都調(diào)用,ASP.NET中的每個站點可創(chuàng)建一個Global.asax文件,該文件屬全局文件,可監(jiān)控整個站點的所有操作,利用它的這一特性可以在該文件中創(chuàng)建以下方法:
voidApplication_BeginRequest(Object sender, EventArgs e)
{
SqlKeymyCheck = newSqlKey(this.Request);
bool a = myCheck.CheckRequestForm();
bool b = myCheck.CheckRequestQuery();
if ( myCheck.CheckRequestQuery())
{
//寫入日志文件
Log_Err.Info(this.GetType().ToString(), "發(fā)現(xiàn)sql注入,嘗試注入的IP是:" + Request.UserHostAddress.ToString() + ",嘗試注入的URL是:" + Request.Url.ToString());
Response.Redirect("Jfxt_Err.aspx");
}
else
{
//放行正常請求
}
}
該方法的作用是:檢查交互數(shù)據(jù),通過調(diào)用SqlKey類中的方法過濾掉所有設(shè)定好的關(guān)鍵詞。
2)使用參數(shù)化方式構(gòu)造SQL語句。根據(jù)上面SQL注入的例子可知,SQL注入的原理就是將正常的參數(shù)替換為其他有害的SQL命令,除了上面過濾關(guān)鍵詞的方法,還可以利用C#中的SqlParameter類對構(gòu)造的SQL語句進行參數(shù)化處理。
還是以上面的SQL語句為例,查詢用戶名為aa、密碼為123456的用戶是否存在的SQL語句為:
select * from user_table where username='aa' and password='123456 '
由于未對username和password參數(shù)進行處理,存在SQL注入漏洞,若使用SqlParameter類對上面的SQL語句進行參數(shù)處理,則:
stringsqlpd = string.Format("select * from jwsj_user where username =@username and password =@password");
SqlParameter[] ps = {
newSqlParameter("@username",”aa”),
newSqlParameter("@password",”123456”)
};
在SQL語句執(zhí)行過程中即使將變量變?yōu)閻阂釹QL語句,由于進行了參數(shù)化惡意SQL語句也不會被執(zhí)行,這樣就可以保證數(shù)據(jù)安全。實際運用中SQL語句參數(shù)化的效果圖如圖4所示。
3? 分類匯總統(tǒng)計查詢
麗江文化旅游學(xué)院在線教育評價系統(tǒng)的主要目的是,在學(xué)生提交評價后系統(tǒng)能夠根據(jù)設(shè)定的評價指標(biāo)體系快速生成評價結(jié)果,因此對數(shù)據(jù)庫的數(shù)據(jù)分類統(tǒng)計查詢顯得尤為重要。
學(xué)生評價結(jié)果存放在lyxy_evaluation表中,假設(shè)該表中存在以下數(shù)據(jù),如表1所示。
課程信息表lyxy_courseinfo中假設(shè)存在以下數(shù)據(jù),如表2所示。
學(xué)生信息表lyxy_studentinfo表中假設(shè)存在以下數(shù)據(jù),如表3所示。
1)查詢課程名為“數(shù)據(jù)結(jié)構(gòu)”中已評價和未評價的學(xué)生人數(shù)。對數(shù)據(jù)結(jié)果進行匯總統(tǒng)計是我們經(jīng)常使用的功能,由于學(xué)生評價結(jié)果是通過客戶端提交到服務(wù)器端并存入數(shù)據(jù)庫,該功能必須通過SQL語句實現(xiàn):
select? 課程名稱,SUM(ypj) as 已評價人數(shù),SUM(wpj) as? 未評價人數(shù)
from (
select b.課程名稱,COUNT(*) as已評價人數(shù),0 as未評價人數(shù)
from lyxy_evaluationa,lyxy_courseinfob,lyxy_studentinfo c where a.課程編號=b.課程編號 and a.學(xué)號=c.學(xué)號 and a.課程名稱==數(shù)據(jù)結(jié)構(gòu) and a.學(xué)號 in (select 學(xué)號 from lyxy_studentinfo)
group by b.課程名稱
union all
select b.課程名稱,0 as已評價人數(shù),COUNT(*) as未評價人數(shù)
from lyxy_evaluationa,lyxy_courseinfob,lyxy_studentinfo c where a.課程編號=b.課程編號 and a.學(xué)號=c.學(xué)號 and a.課程名稱==數(shù)據(jù)結(jié)構(gòu) and a.學(xué)號 not in (select 學(xué)號 from lyxy_studentinfo)
group by b.課程名稱
) a group by課程名稱order by課程名稱
該匯總查詢是非常典型的多表交叉查詢,由于SQL語句的特性,若要查詢某門課中已評價和未評價學(xué)生人數(shù),一條SQL語句無法實現(xiàn),需要通過union all方式分別查詢已評價的學(xué)生人數(shù)和未評價的學(xué)生人數(shù),最后通過SUM()函數(shù)將結(jié)果進行求和得到最終統(tǒng)計結(jié)果。
2)查詢計科2班數(shù)據(jù)庫原理課程評價中二級指標(biāo)小于20分的學(xué)生人數(shù)。對于某門課程的評價得分查詢也會經(jīng)常使用。通過分析以上3張表格可以看出,課程評價二級指標(biāo)存儲在lyxy_evaluation表中,但需要查詢學(xué)生信息表才能得到計科2班學(xué)生人數(shù),同時還要排除計科2班中未評價的學(xué)生人數(shù)。SQL語句如下:
select 課程名稱,count(*) as 學(xué)生人數(shù) from lyxy_evaluation where 二級指標(biāo)<20 and 課程名稱=數(shù)據(jù)庫原理 and 學(xué)號 in(select 學(xué)號 from lyxy_studentinfo where 班級名稱=計科2班)
4? 結(jié)? 論
之所以開展教育評價改革是黨中央、國務(wù)院為了深入貫徹落實習(xí)近平總書記關(guān)于教育的重要論述和全國教育大會精神,完善立德樹人體制機制,扭轉(zhuǎn)不科學(xué)不合理的教育評價導(dǎo)向。通過計算機技術(shù)、網(wǎng)絡(luò)技術(shù)的運用,將教育評價改革快速高效地應(yīng)用到教育教學(xué)中去。麗江文化旅游學(xué)院在線教育評價系統(tǒng)正是在這一時代大背景下進行的嘗試。在系統(tǒng)開發(fā)中需要使用各種計算機技術(shù)對系統(tǒng)進行不斷的完善,本文主要對系統(tǒng)開發(fā)中運用的幾項關(guān)鍵技術(shù)進行闡述。
參考文獻:
[1] 王金山,方慈,子令承.高校教學(xué)質(zhì)量監(jiān)控系統(tǒng)分析與設(shè)計 [J].中國高等教育評估,2001(l):36-39+49.
[2] 李如忠.數(shù)據(jù)加密和數(shù)字簽名技術(shù)在局域網(wǎng)中的應(yīng)用 [J].計算機應(yīng)用研究,2004(5):160-162.
[3] 張小云,張增新.數(shù)據(jù)加密技術(shù)在網(wǎng)絡(luò)數(shù)據(jù)信息安全中的應(yīng)用 [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2023(4):22-23.
[4] 徐小燕,時戴新,吳文超.數(shù)據(jù)加密技術(shù)在網(wǎng)絡(luò)安全中的應(yīng)用 [J].無線互聯(lián)科技,2023,20(7):84-87+100.
[5] 劉瑞寧.SQL注入攻擊防御策略的研究 [J].信息記錄材料,2022,23(9):141-143.
[6] 白鑫玉.SQL注入攻擊檢測技術(shù)研究 [D].北京:北京交通大學(xué),2022.
[7] 呂迅喜.全面創(chuàng)新班級文化建設(shè),落實立德樹人根本任務(wù)——學(xué)習(xí)習(xí)近平總書記在全國教育大會上的重要講話(十) [J].中國德育,2019(7):7-9.
作者簡介:李光燦(1985—),男,漢族,云南賓川人,講師,本科,研究方向:計算機技術(shù)應(yīng)用;楊志琴(1989—),女,彝族,云南麗江人,副教授,碩士研究生,研究方向:計算機技術(shù)應(yīng)用。