韩 婷,董 默,宋 欣,刘 畅
(牡丹江医学院,黑龙江 牡丹江 157011)
信息技术的快速发展和互联网的广泛普及,促进了教育信息化的发展,使得越来越多的信息系统开始在教育的各个环节发挥重要作用。备课作为教学中的重要环节,是影响学校教学质量和学生学习效果的关键因素,在教学活动中占据着十分重要的地位。信息技术的引入提高了备课效率。目前,很多学校根据自身情况设计了教师备课系统。教师利用该系统可以方便地查找备课资料,与其他教师共享教学资源,开展教学研讨,达到了优势互补和集思广益的效果。然而,备课系统在给教师教学带来便利的同时,其信息安全性问题也受到了教师们的广泛关注。尤其对医学院校来说,系统中存储着大量医学数据或医学病例,一方面,医学数据具有严谨性和重要性;另一方面,医学病例很可能涉及患者隐私。一旦这些医学相关数据被攻击者恶意篡改或盗取,将给院校教学和患者隐私带来严重影响[1]。信息的存储安全是提高系统安全性的重要环节。MySQL数据库是很多中小型系统平台常用的后台数据库,也是教师备课系统常用的数据库类型之一。但是MySQL数据库在使用过程中,各种攻击手段也蜂拥而至。据乌云漏洞平台统计,腾讯、中关村在线、链家等著名平台近年来均受到不同程度的SQL注入攻击,造成了一定影响,可见针对MySQL数据库最主要的就是对SQL注入攻击进行防御。本文开展医学院校教师备课系统的信息安全性研究,分析提高系统信息安全的有效措施,重点讨论如何提高系统数据库的安全性,尤其是SQL注入攻击的防御方法,研究成果可为同类型数据存储方案的设计提供参考,具有重要的现实意义和研究价值。
为了提高系统的安全性,需要考虑数据的安全存储问题。因此,在设计医学院教师备课系统时,为保证信息安全存储,主要进行了如下设计。
数据加密是信息安全存储常用且有效的方式之一。加密数据时,需要综合考虑数据内容和用户的使用需求,不同的数据内容需要采用不同的加密方式。若数据内容需要对用户明文显示,而数据在存储时需要以密文的形式进行存储,则采用AES加密方式进行加密。对登录口令等极为敏感关键的信息,无论对用户个人还是对其他用户都应当不以明文显示。即使用户本人登录自己的账户也应当无权查看当前的登录口令,仅能够通过输入正确口令后对其进行修改或重置。这类数据可采用MD5加密方式进行加密[2]。此外,部分数据中的内容在存储后需要管理员利用数据的部分信息对其进行管理,如统计检索等。这些数据对用户来说需要全部或部分显示,而对其他用户来说不能完全以明文形式显示,则需要对这些数据的部分内容进行加密,此时采用隐藏处理,即对每组数据中的部分字段或部分内容进行加密或隐藏,使其仅有部分内容以明文形式显示。
控制存储数据的访问权限也是保障数据信息安全的重要措施之一。目前,较为常用的数据访问控制方法包括用户身份识别技术和访问权限控制技术。其中,用户身份识别技术主要通过口令验证、通行验证以及特征验证等技术来确定登录用户身份是否合法。访问权限控制技术主要是对数据的操作行为进行限制,如对保密性较高的数据,其访问权限控制可到具体的单个指定用户等。考虑到实际应用情况,本文的备课系统在用户身份识别方面采用口令验证的方法;在数据访问控制方面,通过设定用户的类别并赋给相应的权限来控制访问权限;在口令验证方面,设置有效的登录口令。简单的登录口令极易成为黑客攻击的突破口,导致数据信息泄露。为此,本备课系统以大小写字母和特殊符号构成登录口令,同时要求数据库管理员定期更改登录口令。当普通用户注销账户时,管理员要收回其账户权限,而对新增加的用户分配新的口令和密钥。
在数据访问控制方面,赋予不同用户不同的权限。医学院教师备课系统的用户设计为数据库超级管理员(user_su)、普通管理员(user_ad)和教师用户(user_ord)3类。其中,数据库超级管理员具有最高的数据库操作权限,为其授予权限的语句为grant all on*.* to user_su@’localhost’;普通管理员的权限略小,仅能够执行建表和修改表等基本操作,为其授予权限的语句为grant select,insert temporary tables,index show view on ptlat.* to user ad@’localhost’;教师用户是数量最多的用户类别,具有的权限范围更小,为其授予权限的语句为 grantselect,update,insert on ptplat.* to user_ord@’localhost’。不同类别的用户仅能够在其允许的权限范围内对数据库进行操作,没有其他操作权限。
为了避免数据由于受到自然灾害或极端天气等非人力因素影响,导致数据库系统崩溃或数据丢失现象的发生,需要定期备份数据。备份时通常将数据备份到不同物理位置的不同机器上。在选择备份策略时,应当根据完全、增量以及差异等备份特点,以及系统的数据量、所需备份时间、数据恢复时间要求等综合考虑实施组合设置,既可以节省存储资源,还可以避免数据恢复时质量下降。本文设计的系统数据设置为每天备份一次所有数据,通过在服务器端设置定时的SQL脚本,将SQL语句导出到bak_my.sql。
数据库日志中通常会记录对数据库执行的一些修改操作。对MySQL数据库而言,当对MySQL进行操作时,它的二进制日志会利用DDL和DML两种语言对操作行为进行记录,并存放到binlog日志文件中。一旦发生数据丢失或需要回滚到指定时间的数据,可以利用该日志实现恢复[3]。在实际使用时,启动MySQL日志功能的方式为先打开my.ini文件,再去掉语句log-bin=mysql-bin前的注释符号,重新启动数据库。bin-log的数据格式通常如表1所示。
表1 bin-log基本格式
MySQL数据库是目前中小型机构常用的后台数据库,也较为广泛地应用于院校备课系统。如何防止SQL注入攻击是信息安全技术人员不可回避的问题,也是技术含量较高的数据安全保障措施。针对MySQL数据库最常见的攻击方式是SQL注入攻击[4]。SQL注入利用Web应用的漏洞,通过拼接非法SQL语句攻击数据库或服务器,从而获取或破坏数据。如果应用程序在运行时不对用户输入进行检测和过滤,极容易受到攻击者的SQL注入攻击。常见的SQL注入攻击方式主要有重言式、集合查询、报错注入、编码替换、存储过程、延时盲注、二阶查询攻击等。由于攻击者主要通过拼接违法的字符串来发起SQL注入攻击,因此目前SQL注入攻击防御方法大多通过对字符串进行匹配来实现。目前较为流行的字符串匹配算法主要有Aho-Corasick算法(简称AC算法)和Wu-Manber算法(简称WM算法)。AC算法在实现时主要包括预处理和匹配两个阶段,其中预处理阶段主要生成跳转、失败和输出三个函数,跳转函数根据初始状态将每个读入模式串中的字符构建状态转移;失败函数用来确定下一个状态;输出函数用于输出某条路径上发现的匹配模式。WM算法在预处理阶段生成shift、hash和prefix三个函数,分别为后缀跳转表、索引表和前缀跳转表。经实验比较,在相同计算配置下,WM算法执行时间远小于AC算法,即WM算法的效率较高。本文拟采用的基于模式匹配的SQL注入防御方法是在上述两种算法的基础上改进而来,下面将详细讨论如何构建有效的SQL注入攻击防御模型。
设计有效的SQL注入防御模型是避免数据库系统受到SQL注入攻击的有效手段。典型的SQL注入防御模型通常是基于模式匹配对SQL注入攻击进行防御。基于模式匹配的SQL注入防御模型通常包括静态阶段和动态阶段两个阶段。其中,静态阶段的处理过程是先利用静态匹配算法处理SQL语句,然后将静态匹配算法生成的新的SQL语句与事先存储的恶意模式进行匹配。若匹配成功,则认为该SQL语句为恶意语句,对其采用拒绝处理;若匹配结果显示超过阈值,则进入动态匹配阶段,并采用动态方式处理该SQL语句。
动态阶段的处理主要由人工操作,将来自静态处理阶段超过阈值报警的SQL语句提交给专业的数据库管理人员。管理人员根据专业知识对该语句的数据进行判定,如果认为该语句是恶意的,则将新的模式添加到恶意模式列表,用于下一阶段的静态阶段处理使用。上述基于模式匹配的SQL注入防御模型的基本处理流程,如图1所示。从上述介绍可知,基于模式匹配的SQL注入防御模型在实际应用时可能存在以下缺陷:一是针对并发量较高的应用程序,每次交互均进行模式匹配则可能导致较大的时间开销;二是模式匹配中通常是匹配由特殊符号、表名或字段名构成的模式,模式列表较大,可能会降低匹配效率;三是实际中SQL注入攻击远远小于正常的SQL查询,对所有的SQL均进行模式匹配可能增加正常查询的响应时间。为了解决这些问题,本文在应用基于模式匹配的SQL注入防御模型时,将传统的SQL模式列表库在拆分和移除属性值的基础上,根据语句的特征将其进一步整合,缩减模式列表规模。同时,将良性匹配模式列表由SQL语句更改为MD5串,将恶意匹配中的字符串替换为一种语法结构,且将AC算法改为WM算法。良性匹配模式用来对良性SQL语句进行匹配,若匹配失败再交由恶意匹配模式进行匹配。
图1 基于模式匹配的SQL注入防御模型基本流程
在数据库系统中,整型参数通常作为数据库的关键字段或标识字段使用,往往作为条件查询语句where中的条件使用。目前,常见的整型参数注入攻击主要有select域值注入攻击、pos隐藏域注入攻击和get明文显示导致的注入攻击3类。若整型参数以明文方式显示,容易发生SQL注入攻击。攻击者可以通过穷举的方式获得整型参数的管理数据,或者利用各种SQL注入语句开展攻击。传统应对攻击手段的方式通常是先对收到的参数类型进行转换,通过考察转换后的参数权限与用户权限是否匹配来决定是否进行下一步的数据展示。这种方式能在一定程度上缓解攻击,但是其依赖性较强,同时对不同类型的参数都需要事先设置对应的权限信息,导致权限控制复杂度较高,影响数据表的设计效率,且很难合理设置每个参数的权限[5]。为此,本文采用加解密的方式对整型参数SQL注入攻击进行防御。考虑到在系统前端可见的字符串往往都是加密后的字符串,因此该字符串在后端进行数据交互时先进行解密,待解密完成后决定是否由数据库正常执行[6]。在加解密时主要采用对称加密算法,并综合考虑算法破解难度和算法的执行效率。本文选用AES加密算法进行加密。
为了防止攻击者伪造加密字符串,本文增加了校验位,即在采用AES加密算法对数据进行加密前,通过在数据中增加多个校验位的方式对数据进行重构。解密时,先比对校验位的值是否为预期值,从而确定该字符串是否被攻击者伪造。
具体而言,在利用AES进行加密前,将待加密数据进行重构并按照指定的存储方式进行编码。重构主要是在待加密数据中增加多个特殊位,将原待加密数据重构为由待加密数据、校验位1、0、0、待加密数据、校验位2、尾0等7个部分构成的字符串。其中,两个0校验位、两个特殊值校验位以及尾0校验位均匀分布在新形成的字符串中,校验位1和校验位2为自定义校验位,由待加密字符对指定值求余得到,可以避免出现相同校验值。在解密时可以通过比较这些校验位防止非法输入。在存储方式方面,重构后的第一部分待加密数据采用32bit大端序方式存储,第二部分待加密数据采用32bit小端序方式存储,校验位1为16bit大端序存储,校验位2为16bit小端序存储,0校验位和尾值校验采用无符号字符方式存储。
利用AES进行解密时,首先利用AES对加密数据进行解密得到字符串,将字符串解包为7个部分,如果解包后的各个校验位的值不是预期值,则表明该数据不是上述加密函数加密的字符串,立即停止对数据库的后续操作,否则将解密后得到的整数传递给应用程序。
医学院教师备课系统中存储了较多的敏感数据,且数据不容随意修改或删除,因此对信息安全提出了较高的要求。本文对如何提高系统的信息安全性进行了研究和分析,从采用数据加密存储技术、数据访问权限控制、数据备份、数据库日志使用以及数据库防SQL注入攻击等方面对信息安全存储进行详细设计。其中,重点对如何防御SQL注入攻击开展了研究,给出了基于模式匹配的SQL注入防御模型,该模型对正常的系统时延影响较小,能够解决传统防御模型在效率和安全方面不易平衡的问题,同时利用对称加密算法,给出了整型参数的SQL注入防御的安全性设计,为整型参数SQL注入防御提供了一种新的思路。尽管本文给出了系统数据信息安全防护方法,且目前该领域很多学者也取得了一些优秀成果,但是随着用户需求的多样化和网络技术、数据库技术的进一步发展,未来必然会出现更多新型的信息安全威胁方法或攻击手段,因此需要投入更多的人力和物力开展相关的研究。