APP下载

防SQL注入的web系统交互设计

2014-09-23毋世晓

企业导报 2014年9期
关键词:用户名语句页面

毋世晓

摘要:用户使用表单页面进行交互时,系统对关键的SQL操作语句进行预处理,可以防止SQL注入。经过预处理的数据查询语言比普通意义上的SQL语句更加安全可靠。本文以留言板系统为例,对该系统的功能里涉及登陆、注册、添加留言的页面代码SQL语句部分进行了预处理,借以保证用户信息安全。

关键词:QL预处理;留言板;SQL注入引言:根据Imperva公司的“监测黑客论坛:ADC每月网络攻击分析(2012年10月)”报告显示,在黑客论坛,最常被讨论的是拒绝服务(DoS)/分布式拒绝服务(DDoS)攻击和SQL注入。根据安全云托管公司FireHost公司9月份发布的报告显示,在2012年的前两个季度,SQL注入攻击上升了69%。SQL注入可以通过判断Web环境是否可以进入,进而输入特殊的语句判断数据库的类型、判断数据库的用户名和密码,最终进入后台管理获取用户信息,这对Web安全威胁很大。

本文通过一个详细的案列来介绍如何在一个系统中利用SQL 预处理语句防范SQL注入。SQL预处理语句实现的过程就是内部转义的过程,它将一些需要转义的字符进行转义,对SQL语句进行预处理, 将SQL语句进行内部编译并优化,所需要的查询只需要被解析一次,使用的资源更少,执行速度更快,当然也更安全。

系统包括5个模块:登陆、注册、添加留言、查看留言,删除留言。前四个模块是针对用户的,后一个模块是针对管理人员的。

文章的第一部分是引言,第二部分介绍论文的技术背景,第三部分介绍系统的详细设计,第四部分是实现结果,第五部分是总结,第六部分是参考文献。

一、技术背景

本系统使用JSP+JavaBean+Access的方式来开发留言板系统[1]。所需要的软件涉及:Apache Tomcat 6.0,jdk1.7.0_17,Microsoft Access 2000, Macromedia Dreamweaver 8, Jcreator LE

5.00,在所有的软件安装成功以后需要配置2个环境变量:在我的电脑-->属性-->高级-->环境变量里,系统变量里选中Path变量双击打开,在变量名的最后一个分号后面加入:C:Program FilesJavajdk1.7.0_17in;(前提是JDK是默认安装的),并在系统变量里新建变量名为ClassPath变量值为C:

Program FilesJavajdk1.7.0_17lib的系统变量,配置Java所需的运行环境,是因为JSP页面里会涉及部分Java代码[2]。

在这些软件中,JDK保证JSP中J(Java)的运行环境,Tom

cat充当JSP中S(Server)服务器的功能,Dreamweaver提供

JSP中P(Page)的编辑环境。 可以在Jcreator中查看Java文件,并将Java文件编译成.class文件,.class文件都被部署在C:Program FilesApache Software FoundationTomcat 6.0webappsROOTWEB-INFclassesmypackage文件夹下,在JSP文件中通过import导入这些class文件。

系统共使用10个文件,其中包括2个class文件(Access

ConnBean.class, MyUtil.class),6个jsp文件(Login.jsp, liuyan.

jsp, writely.jsp, viewly.jsp, writelyd.jsp, delete.jsp),2个html页面(1.html, 2.html)。

AccessConnBean.class 文件完成连接数据库的功能,MyU

til.class文件完成GB2312码到Unicode码的转换,因表单输入页面是GB2312码,而JSP页面的字符串是以Unicode显示的。

因为涉及将注册信息及留言信息写入数据库,系统设计了2个Access数据库——liuyan.mdb和user_info数据库。JSP访问Access数据库的方式是JDBC-ODBC[3]。数据库的详细设计将在第三章介绍。

二、留言板系统

(一)系统功能。本系统共包括2个子系统(用户登陆和留言系统),共完成5个功能:(1)登陆功能。登陆的用户必须是数据库里的用户,如果不是已经注册的用户,则需要点击注册。成功则进入注册界面,失败留在当前页面。(2)注册功能。单输入自己的用户名、密码、邮箱等信息,并通过writelyd.jsp页面写入数据库。(3)查看留言。已经存在的用户登录进入系统以后可以查看留言板信息。(4) 添加留言。用户输入正确的用户名和密码以后可以进入liuyan.jsp页面添加留言,留言内容会通过write

ly.jsp页面添加到数据库。(5)删除留言。该模块需要用户登录,且必须知道管理员的用户名和密码,在2.html输入要删除的留言者姓名,通过delete.jsp页面进行处理,即可删除该留言者的留言。

(二)数据库设计。留言版系统采用Access数据库,因为该数据库设计比较简单,只存放用户注册信息及留言信息,涉及了数据库的插入,查询,删除等操作。

该系统包含两个数据库: user_info数据库和liuyan数据库,这两个数据库各自包含同名的一个表,user_info表包含us

er_id,password, email, name, sex 5个字段。Liuyan表包含xm,

email, ly, url 4个字段。

(三)预处理实现 。留言板系统涉及用户信息的有以下3个页面:Login.jsp, writely.jsp, writelyd.jsp。他们分别完成的功能是使用用户名和密码登陆、将注册信息写入数据库、将留言信息写入数据库。这3个页面都是处理Web表单提交的信息,涉及信息的内容包括用户的用户名,密码,邮箱,留言内容,姓名,地址等。我们使用预处理语句处理数据库的查询、插入等操作, 在防止SQL注入的同时还可以提高系统性能。

以Login.jsp登录页面为例,我们给出关键代码来给大家作对比,先给出普通版本的:

AccessBean.OpenConn();

String sql = “select user_id,password from user_info where

user_id=‘”+userId+” and password=‘“+password+“”;

ResultSet rs = AccessBean.executeQuery(sql);

其中AccessBean是AccessConnBean的一个别名,我们在

usebean中简化了这个类名,这个类用来连接Access数据库,根据数据查询返回结果集ResultSet。

其次我们给出PrepareStatement版本的:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);con=

DriverManager.getConnection(“jdbc:odbc:user_info“,” “,””);

String sql = select user_id,password from user_info where

user_id=‘“+userId+” and password=“+password+”;

PreparedStatement pstmt=con.prepareStatement(sql);

ResultSet rs=pstmt.executeQuery();

在这个版本中,第一句是连接JDBC-ODBC驱动,第二句连接user_info用户注册数据库,第三句是SQL查询语句,第四句将SQL语言进行预编译,并通过预编译语句对象执行查询,将数据结果返回给ResultSet。

使用PreparedStatement预处理语句可以将SQL语言进行预编译,预处理可以自动检查已经绑定好的变量,同时强制转换这些变量使之与底层数据库驱动相匹配,它会忽略掉一些恶意的字符串,在防范SQL注入的同时因为其预编译的功能可以节约因多次重复输入相同条件的SQL语句而消耗的资源。

总结:该系统经测试运行正常,可以实现登录、注册、添加留言、查看留言、删除留言等功能。经过Web表单预提交的数据经过SQL预处理可以防止SQL注入。

参考文献:

[1] 刘玉轩. 基于JSP 和MySQL 的留言板系统设计与实现[J].计算机与信息技术。

[2] 张兴科. JSP动态网站设计项目教程. 北京: 中国人民大学出版社,2010

[3] 张志峰等。Java Web技术整合应用与项目实战。北京:清华大学出版社,2010.

[4] 王燕,李明,王惠琴.??Web数据库的连接技术及安全控制[J].

猜你喜欢

用户名语句页面
《护士进修杂志》投稿程序
刷新生活的页面
《护士进修杂志》投稿程序
重点:语句衔接
《护士进修杂志》投稿程序
机智的快递员
如何搞定语句衔接题
网站结构在SEO中的研究与应用
浅析ASP.NET页面导航技术
作文语句实录