APP下载

在线教育评价系统开发关键技术研究

2024-04-14李光灿杨志琴

现代信息科技 2024年1期
关键词:加密技术关键技术

李光灿 杨志琴

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—),女,彝族,云南丽江人,副教授,硕士研究生,研究方向:计算机技术应用。

猜你喜欢

加密技术关键技术
海洋水文信息加密技术方案设计与测试
运用数据加密技术维护网络安全的可靠性研究
小麦春季化控要掌握关键技术
棉花追肥关键技术
成功育雏的关键技术
老苹果园更新改造的关键技术
数据加密技术在计算机网络安全中应用研究
数据加密技术在计算机网络通信安全中的应用
跨座式单轨与中低速磁浮信号系统的关键技术
杉木萌芽更新关键技术