李光燦 楊志琴



DOI:10.19850/j.cnki.2096-4706.2024.01.008
收稿日期:2023-05-19
摘? 要:麗江文化旅游學院在線教育評價系統是基于Web技術,依托微信公眾平臺,實現PC端、移動端互聯互通的自適應系統。系統設計的目的是使學生可通過移動端設備對自己本學期所上課程進行綜合評價,并以百分制的形式自動匯總評價結果。相應的管理部門可隨時通過移動端設備訪問查看評價結果,系統會將學生教育評價結果反饋給教師及相關部門,以此來提升教學效果。該系統采用ASP.NET技術設計開發,該文主要闡述開發系統過程中用到的幾個關鍵技術。
關鍵詞:教育評價系統;加密技術;SQL查詢;關鍵技術
中圖分類號:TP311.1? 文獻標識碼: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? 引? 言
麗江文化旅游學院在線教育評價系統主要包括以下幾個模塊:登錄模塊、評價指標設置模塊、學生評價模塊、學生評價信息展示模塊、學生評價信息管理模塊、綜合統計分析模塊。在這些模塊的開發過程中引用一些關鍵技術,用以保障系統的正常運行。
1? 數據加密技術
數據系統的首要任務就是保證數據的安全。為防止數據泄露,在開發麗江文化旅游學院在線教育評價系統時對各模塊使用了不同的數據加密技術。
1.1? 登錄數據加密
無論是學生評價,還是后臺管理,第一步都是要登錄系統。在登錄系統時為確保登錄數據安全,防止被人以抓包方式惡意篡改登錄數據,需要對登錄數據進行加密處理。
登錄數據包括用戶名和密碼。系統是基于Web技術開發的,因此在客戶端與服務器通信過程中不能以明文方式直接傳遞用戶名和密碼。HTTP協議是無狀態的協議,采用傳統的對稱加密技術無法將私鑰逐一發送給客戶端,因此在數據傳輸過程中不能使用對稱加密。基于此,麗江文化旅游學院在線教育評價系統采用RSA非對稱加密方式對登錄數據進行處理。
非對稱加密廣泛用于Web數據安全中,與對稱加密不同的是,非對稱加密公鑰向所有客戶端公開,私鑰存儲在服務器端,客戶端使用公鑰對數據進行加密然后通過網絡進行傳輸,服務器端接收到數據后使用私鑰對數據進行解密最后得到原始數據。通過C#代碼實現的登錄數據加密過程如下:
1)客戶端通過公鑰對登錄用戶名及密碼進行數據加密
function encrypt() {
//公鑰已經在網頁加載中存到客戶端
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()));
}
加密后的數據以POST方式提交到服務器端,借助抓包工具可查看相應的數據加密結果,如圖1所示。
2)服務器端通過私鑰解密客戶端提交的數據
//接收POST方式提交的客戶端數據
stringdata_sfzh = Request.Params["sfzh"];
stringdata_xh = Request.Params["xh"];
//通過私鑰解密數據
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類中,各模塊可通過類名隨時調用該類的方法以實現數據加密或解密。
通過RSA非對稱加密可保證傳輸過程中登錄數據不被篡改,確保數據安全可靠。
1.2? 參數加密技術
Web技術中客戶端與服務器端的交互往往需要加入不同的參數才能實現。參數傳遞主要通過POST和GET方式實現,麗江文化旅游學院在線教育評價系統中對這兩種參數傳遞方式進行了數據加密,確保參數請求和接收的一致性,防止惡意偽造參數調用相關接口獲取非法數據。
在線教育評價系統使用的參數加密技術是MD5加密技術。MD5信息摘要算法(MD5 Message-Digest Algorithm)是一種被廣泛使用的密碼散列函數,可以產生一個128位(16字節)的散列值(Hash Value),用于確保信息傳輸的完整性。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計并于1992年公開,用以取代MD4算法。這套算法的程序在RFC 1321標準中加以規范。
在線教育評價系統利用了MD5加密不可逆的特性,在進行數據請求時,將所有請求參數按照一定的規則進行組合,然后再加入一個私鑰,再將二者組合得到一個新的字符串,將該字符串進行MD5加密得到一個32位隨機字符串。我們將這個32位隨機字符串與其他參數一并提交到服務器端。服務器端在接收到所有參數后,也會按照同樣的規則將參數進行組合(32位隨機字符串除外),組合后再加入同樣的私鑰得到一個新的字符串,將該字符串進行MD5加密后得到一個32位隨機字符串。將這個隨機字符串與接收到的隨機字符串進行比較,二者相等說明參數未被修改,二者不相等則說明參數被修改過。
通過這個方法能夠確保所有接收到的參數與客戶端的參數一致,從而確保系統數據的安全。C#中實現代碼如下:
//在提交參數時生成sign
ViewState["timestamp"] = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string md5src = Session["xh"] + ViewState["timestamp"].ToString() + DB.key;
ViewState["sign"] = md5.md5jm(md5src, 32);
客戶端通過POST方式提交數據,以明文方式將數據傳輸至服務器端,參數界面如圖2所示。
圖2? 使用MD5加密技術生成的sign值
服務器端對接收到的參數進行處理,比較二者的MD5值是否相等。
//接收客戶端傳遞的參數
stringxh = context.Request.Form["xh"];
string sign = context.Request.Form["sign"];
string timestamp = context.Request.Form["timestamp"];
//驗證接收到的參數中sign是否與服務器端計算的sign值相等
stringsign_yz = md5.md5jm(xh +timestamp+ DB.key, 32);
if (sign_yz!= sign)
{
Response.Write("");
}
else
{
……
}
2? 防SQL注入技術
SQL注入是指Web應用程序對用戶輸入數據的合法性及完整性不進行判斷或過濾不嚴格,攻擊者利用Web應用程序中事先定義好的查詢語句在其結尾處添加額外的非法SQL語句,在管理員毫不知情的情況下進行非法操作,以此欺騙數據庫服務器執行非授權SQL語句,達到獲取數據信息或破壞數據庫的目的。
例如,我們在登錄時需要查詢數據庫中是否存在用戶名為aa和密碼為123456的數據,SQL語句如下:
select * from user_table where username='aa' and password='123456 '
通常該語句會被正常執行并查詢到結果,但如果輸入的用戶是'or 1 = 1 -- and password=',SQL語句變成了:
select * from user_table where username=''or 1 = 1 -- and password='' and password='123456'
服務器執行該語句時,由于SQL語言的語法規定“--”為注釋標記,“--”后面的語句將不被執行,1=1這一條件永遠成立,因此該語句的含義變成了“查詢所有user_table表中的數據”。由于where條件永遠都是成立的,也就意味著沒有條件。
這只是SQL注入中最基本的方式,就是利用SQL語句的特性,通過篡改正常語句來達到某種目的。
在開發麗江文化旅游學院在線教育評價系統過程中對SQL語句進行了防注入防范,方法及步驟如下:
1)通過過濾關鍵詞方法防范。SQL語句中有一些關鍵詞是不能用作變量的,SQL注入要實現某種目的必然會帶有某些關鍵詞,只要是了解SQL注入原理就能對其進行一一防范。我們創建了一個SqlKey類,它的作用是過濾SQL中的關鍵詞。
publicclassSqlKey
{
privateHttpRequest request;
//羅列出要過濾的關鍵字
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中參數存在,逐個比較參數。
foreach (string iinthis.request.QueryString)
{
// 檢查參數值是否合法。
if (i == "__VIEWSTATE") continue;
if (i == "__EVENTVALIDATION") continue;
if (CheckKeyWord(request.QueryString[i].ToString()))
{
returntrue;
}
}
}
returnfalse;
}
//檢查過濾POST請求
publicboolCheckRequest()
{
if (request.Form.Count> 0)
{
//遍歷提交的表單,逐個比較所有參數是否合法
foreach (string iinthis.request.Form)
{
if (i == "__VIEWSTATE") continue;
if (i == "__EVENTVALIDATION") continue;
//調用自建方法判斷提交的表單項的值是否正常
if (CheckKeyWord(request.Form[i]))
{
//檢查到存在疑似注入的SQL關鍵字
returntrue;
}
}
}
returnfalse;
}
}
SqlKey類封裝了相應過濾數據的方法,可對POST、GET及提交的表單數據進行檢驗,如果提交的數據中含有設定的關鍵詞,則會彈出警告窗口并將頁面引向設置好的頁面中去,效果如圖3所示。
整個系統中通過POST、GET方式提交的數據有若干處,不必在任何需要使用數據過濾的地方都調用,ASP.NET中的每個站點可創建一個Global.asax文件,該文件屬全局文件,可監控整個站點的所有操作,利用它的這一特性可以在該文件中創建以下方法:
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(), "發現sql注入,嘗試注入的IP是:" + Request.UserHostAddress.ToString() + ",嘗試注入的URL是:" + Request.Url.ToString());
Response.Redirect("Jfxt_Err.aspx");
}
else
{
//放行正常請求
}
}
該方法的作用是:檢查交互數據,通過調用SqlKey類中的方法過濾掉所有設定好的關鍵詞。
2)使用參數化方式構造SQL語句。根據上面SQL注入的例子可知,SQL注入的原理就是將正常的參數替換為其他有害的SQL命令,除了上面過濾關鍵詞的方法,還可以利用C#中的SqlParameter類對構造的SQL語句進行參數化處理。
還是以上面的SQL語句為例,查詢用戶名為aa、密碼為123456的用戶是否存在的SQL語句為:
select * from user_table where username='aa' and password='123456 '
由于未對username和password參數進行處理,存在SQL注入漏洞,若使用SqlParameter類對上面的SQL語句進行參數處理,則:
stringsqlpd = string.Format("select * from jwsj_user where username =@username and password =@password");
SqlParameter[] ps = {
newSqlParameter("@username",”aa”),
newSqlParameter("@password",”123456”)
};
在SQL語句執行過程中即使將變量變為惡意SQL語句,由于進行了參數化惡意SQL語句也不會被執行,這樣就可以保證數據安全。實際運用中SQL語句參數化的效果圖如圖4所示。
3? 分類匯總統計查詢
麗江文化旅游學院在線教育評價系統的主要目的是,在學生提交評價后系統能夠根據設定的評價指標體系快速生成評價結果,因此對數據庫的數據分類統計查詢顯得尤為重要。
學生評價結果存放在lyxy_evaluation表中,假設該表中存在以下數據,如表1所示。
課程信息表lyxy_courseinfo中假設存在以下數據,如表2所示。
學生信息表lyxy_studentinfo表中假設存在以下數據,如表3所示。
1)查詢課程名為“數據結構”中已評價和未評價的學生人數。對數據結果進行匯總統計是我們經常使用的功能,由于學生評價結果是通過客戶端提交到服務器端并存入數據庫,該功能必須通過SQL語句實現:
select? 課程名稱,SUM(ypj) as 已評價人數,SUM(wpj) as? 未評價人數
from (
select b.課程名稱,COUNT(*) as已評價人數,0 as未評價人數
from lyxy_evaluationa,lyxy_courseinfob,lyxy_studentinfo c where a.課程編號=b.課程編號 and a.學號=c.學號 and a.課程名稱==數據結構 and a.學號 in (select 學號 from lyxy_studentinfo)
group by b.課程名稱
union all
select b.課程名稱,0 as已評價人數,COUNT(*) as未評價人數
from lyxy_evaluationa,lyxy_courseinfob,lyxy_studentinfo c where a.課程編號=b.課程編號 and a.學號=c.學號 and a.課程名稱==數據結構 and a.學號 not in (select 學號 from lyxy_studentinfo)
group by b.課程名稱
) a group by課程名稱order by課程名稱
該匯總查詢是非常典型的多表交叉查詢,由于SQL語句的特性,若要查詢某門課中已評價和未評價學生人數,一條SQL語句無法實現,需要通過union all方式分別查詢已評價的學生人數和未評價的學生人數,最后通過SUM()函數將結果進行求和得到最終統計結果。
2)查詢計科2班數據庫原理課程評價中二級指標小于20分的學生人數。對于某門課程的評價得分查詢也會經常使用。通過分析以上3張表格可以看出,課程評價二級指標存儲在lyxy_evaluation表中,但需要查詢學生信息表才能得到計科2班學生人數,同時還要排除計科2班中未評價的學生人數。SQL語句如下:
select 課程名稱,count(*) as 學生人數 from lyxy_evaluation where 二級指標<20 and 課程名稱=數據庫原理 and 學號 in(select 學號 from lyxy_studentinfo where 班級名稱=計科2班)
4? 結? 論
之所以開展教育評價改革是黨中央、國務院為了深入貫徹落實習近平總書記關于教育的重要論述和全國教育大會精神,完善立德樹人體制機制,扭轉不科學不合理的教育評價導向。通過計算機技術、網絡技術的運用,將教育評價改革快速高效地應用到教育教學中去。麗江文化旅游學院在線教育評價系統正是在這一時代大背景下進行的嘗試。在系統開發中需要使用各種計算機技術對系統進行不斷的完善,本文主要對系統開發中運用的幾項關鍵技術進行闡述。
參考文獻:
[1] 王金山,方慈,子令承.高校教學質量監控系統分析與設計 [J].中國高等教育評估,2001(l):36-39+49.
[2] 李如忠.數據加密和數字簽名技術在局域網中的應用 [J].計算機應用研究,2004(5):160-162.
[3] 張小云,張增新.數據加密技術在網絡數據信息安全中的應用 [J].網絡安全技術與應用,2023(4):22-23.
[4] 徐小燕,時戴新,吳文超.數據加密技術在網絡安全中的應用 [J].無線互聯科技,2023,20(7):84-87+100.
[5] 劉瑞寧.SQL注入攻擊防御策略的研究 [J].信息記錄材料,2022,23(9):141-143.
[6] 白鑫玉.SQL注入攻擊檢測技術研究 [D].北京:北京交通大學,2022.
[7] 呂迅喜.全面創新班級文化建設,落實立德樹人根本任務——學習習近平總書記在全國教育大會上的重要講話(十) [J].中國德育,2019(7):7-9.
作者簡介:李光燦(1985—),男,漢族,云南賓川人,講師,本科,研究方向:計算機技術應用;楊志琴(1989—),女,彝族,云南麗江人,副教授,碩士研究生,研究方向:計算機技術應用。