摘要:学校的教务平台和学生管理系统正在加速向WEB方向发展, 设计一系列的技术手段, 在尽量不增加开发难度和硬件费用的前提下, 提升高校管理平台的数据库的安全性。
关键字:数据库,SQL注入,安全
1.概述
随着互联网和高校信息化的发展, 学校业务上网成了学校的 “必修课” , 现在大部分院校都可以提供在线学生信息系统服务。在方便了学生的同时, 却也给学校的网络安全带来了更大的挑战。
在学校网络安全防护的各个角度中, 数据库防护是重中之重。原因在于SQL注入攻击风险小、 开销小、 实施容易, 是攻击校园网络的主要手段。同时学校信息系统大部分都是使用自主开发模式, 费用低周期短, 但是受限于学校技术人员的软件开发经验和水平, 往往存在需求分析不充分, 代码编写不规范等问题。开发出的系统往往以 “能用即可” 为标准, 在安全方面存在较大隐患。网站的数据库一旦被注入, 常常会造成平台瘫痪, 学生信息泄露甚至成绩被篡改等一系列后果。
2.常用SQL注入技术
SQL注入攻击在国内的流行可以追溯到本世纪初, 已经有十余年的历史, SQL注入从原理上说都是一致的, 即通过把SQL命令插入到查询字符串中, 以欺骗服务器执行恶意的SQL命令。实现这一目的的手段是多种多样的, 一般来说可以分为以
下几种:
1.GET注入。如平台有一查询成绩页面, 获得用户输入的查询参数4031后生成页面的地址如下: http://localhost:8080/Ex⁃celUsingXSLT/Default.aspx?studentid=4031.此时平台会在指定表里查询学号为4031的学生成绩。此时SQL语句的内容如下:SELECT * FROM SCORE WHERE student_id = 4031。而如果用户此时将地址改为4031 'or'1'='1。
SQL 语句将会变为 SELECT * FROM SCORE WHERE stu⁃dent_id = 4031 or 1 = 1.由于 1=1 是恒真表达式, 所以此时WHERE子句实际上已经失去了作用。此时页面将返回SCORE表中的全部数据。
2.POST注入。动态网站的大部分交互性都是通过表单来实现的。如登陆界面会让用户输入用户名和密码。后台使用POST方法获得这些参数, 并写入SQL语句。此处同样会产生注入漏洞。而且攻击者可以从页面设计中得知此处参数的大致用途, 不仅是查询, 也可能是更新或删除数据。
3.COOKIES注入。Cookies是由服务器生成, 保存在客户端的一个小文本文件。在大数据时代, Cookies的使用非常广泛。但是Cookies也会给系统带来额外的注入风险。因为ASP获取用户输入常用的request方法本身有四个集合。该方法如不指定集合, 就会按照 Query String>Form>Cookies>Server Variables的顺序获取数据, 此时就给攻击者提供了注入的可能性。
除了前述几种手段之外, 还有XML注入, 时间差盲注等方法, 还有一些黑客工具使用暴力测试的方法进行注入。通过影响到最终生成的SQL语句, SQL注入会造成数据泄露、 被篡改、删除等恶劣影响, 如果系统使用sa账户连接数据库, 那攻击者甚至可以通过操纵xp_cmdshell这样的系统存储过程来获得整个系统的完整权限。
3.SQL注入的防范措施
学校的信息平台开发常常是短平快式的开发方法, 服务器和带宽资源也相对有限。同时, 系统的安全性和易用性本身也是一对矛盾体。笔者结合自身的开发经验和教训, 提出几点SQL注入的防范思想和方法。
1.控制注入损失。在有限资源下想完全防止SQL被注入几乎是不可能的, 首先要将风险控制在可接受的范围。方法有:数据库分级设计。把数据按照重要性和保密度分成几个级别。为访问数据库时使用的账户设计好对应的权限。这部分工作可以使用SQL的角色控制访问系统来方便的实现且不会为系统带来额外的开销, 可以在数据库被注入之后有效地控制损失。
数据备份。如平台需提供数据库的UPDATE或DELETE等操作, 那么对相应的表要做好备份, 并且在后台记录这些操作。
2.增加注入难度。在开发过程中使用一些技术手段, 可以将注入的难度增加到使大部分攻击者感觉 “不合算” 的地步, 即可算是成功的安全措施。方法有:
对用户输入进行审查。使用代码过滤单引号、 SQL关键字、 运算符, 可以使用正则表达式进一步规范用户的输入, 也可以使用防注入程序、 SQL注入防火墙来实现这一目标。规范参数传递。拼接SQL语句的方式可以说是注入漏洞的根本来源, 所以作为开发人员要在平台设计的时候要多考虑参数传递时可能出现的各种异常。使用Parameters规范参数传递过程、 使用存储过程中不再拼接SQL语句, 均可以有效防止注入。规范request方法。可以通过重写request方法、 指定request方法使用的集合等技术手段, 防止request方法获取到开发者并不想取得的非法数据。
4.小结
学校信息平台的安全维护是一项系统工程, 其面临的安全环境是非常复杂的, 其中有相对 “善意” 的攻击如本校学生做网络攻防练习或者向同学炫耀自己的技术, 也有恶意的如篡改成绩、 非法获取学生信息甚至控制学校的信息系统。其中数据库安全是一个核心环节, 需要开发和运营人员对数据库系统、 开发平台和网络环境有更深的理解, 才能有效防范攻击, 保障数据安全。
参考文献
[1] CNCERT互联网安全威胁报告-2014年7月. 国家互联网应急中心, 2014年8月31日
[2] 冯谷、 高鹏. 新型SQL注入技术研究与分析[J]. 计算机科技, 2012, 11A (64)
[3] 陈学平.网站数据库SQL注入及防范[J].制造业自动化2010, 32(10)
[4] 欧阳汉斌.高校教务管理系统安全问题分析及对策[J].山东师范大学学报, 2008,6 (22)