国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

防SQL注入的web系統(tǒng)交互設(shè)計(jì)

2014-09-23 01:45毋世曉
企業(yè)導(dǎo)報(bào) 2014年9期
關(guān)鍵詞:用戶(hù)名語(yǔ)句頁(yè)面

毋世曉

摘要:用戶(hù)使用表單頁(yè)面進(jìn)行交互時(shí),系統(tǒng)對(duì)關(guān)鍵的SQL操作語(yǔ)句進(jìn)行預(yù)處理,可以防止SQL注入。經(jīng)過(guò)預(yù)處理的數(shù)據(jù)查詢(xún)語(yǔ)言比普通意義上的SQL語(yǔ)句更加安全可靠。本文以留言板系統(tǒng)為例,對(duì)該系統(tǒng)的功能里涉及登陸、注冊(cè)、添加留言的頁(yè)面代碼SQL語(yǔ)句部分進(jìn)行了預(yù)處理,借以保證用戶(hù)信息安全。

關(guān)鍵詞:QL預(yù)處理;留言板;SQL注入引言:根據(jù)Imperva公司的“監(jiān)測(cè)黑客論壇:ADC每月網(wǎng)絡(luò)攻擊分析(2012年10月)”報(bào)告顯示,在黑客論壇,最常被討論的是拒絕服務(wù)(DoS)/分布式拒絕服務(wù)(DDoS)攻擊和SQL注入。根據(jù)安全云托管公司FireHost公司9月份發(fā)布的報(bào)告顯示,在2012年的前兩個(gè)季度,SQL注入攻擊上升了69%。SQL注入可以通過(guò)判斷Web環(huán)境是否可以進(jìn)入,進(jìn)而輸入特殊的語(yǔ)句判斷數(shù)據(jù)庫(kù)的類(lèi)型、判斷數(shù)據(jù)庫(kù)的用戶(hù)名和密碼,最終進(jìn)入后臺(tái)管理獲取用戶(hù)信息,這對(duì)Web安全威脅很大。

本文通過(guò)一個(gè)詳細(xì)的案列來(lái)介紹如何在一個(gè)系統(tǒng)中利用SQL 預(yù)處理語(yǔ)句防范SQL注入。SQL預(yù)處理語(yǔ)句實(shí)現(xiàn)的過(guò)程就是內(nèi)部轉(zhuǎn)義的過(guò)程,它將一些需要轉(zhuǎn)義的字符進(jìn)行轉(zhuǎn)義,對(duì)SQL語(yǔ)句進(jìn)行預(yù)處理, 將SQL語(yǔ)句進(jìn)行內(nèi)部編譯并優(yōu)化,所需要的查詢(xún)只需要被解析一次,使用的資源更少,執(zhí)行速度更快,當(dāng)然也更安全。

系統(tǒng)包括5個(gè)模塊:登陸、注冊(cè)、添加留言、查看留言,刪除留言。前四個(gè)模塊是針對(duì)用戶(hù)的,后一個(gè)模塊是針對(duì)管理人員的。

文章的第一部分是引言,第二部分介紹論文的技術(shù)背景,第三部分介紹系統(tǒng)的詳細(xì)設(shè)計(jì),第四部分是實(shí)現(xiàn)結(jié)果,第五部分是總結(jié),第六部分是參考文獻(xiàn)。

一、技術(shù)背景

本系統(tǒng)使用JSP+JavaBean+Access的方式來(lái)開(kāi)發(fā)留言板系統(tǒng)[1]。所需要的軟件涉及:Apache Tomcat 6.0,jdk1.7.0_17,Microsoft Access 2000, Macromedia Dreamweaver 8, Jcreator LE

5.00,在所有的軟件安裝成功以后需要配置2個(gè)環(huán)境變量:在我的電腦-->屬性-->高級(jí)-->環(huán)境變量里,系統(tǒng)變量里選中Path變量雙擊打開(kāi),在變量名的最后一個(gè)分號(hào)后面加入:C:Program FilesJavajdk1.7.0_17in;(前提是JDK是默認(rèn)安裝的),并在系統(tǒng)變量里新建變量名為ClassPath變量值為C:

Program FilesJavajdk1.7.0_17lib的系統(tǒng)變量,配置Java所需的運(yùn)行環(huán)境,是因?yàn)镴SP頁(yè)面里會(huì)涉及部分Java代碼[2]。

在這些軟件中,JDK保證JSP中J(Java)的運(yùn)行環(huán)境,Tom

cat充當(dāng)JSP中S(Server)服務(wù)器的功能,Dreamweaver提供

JSP中P(Page)的編輯環(huán)境。 可以在Jcreator中查看Java文件,并將Java文件編譯成.class文件,.class文件都被部署在C:Program FilesApache Software FoundationTomcat 6.0webappsROOTWEB-INFclassesmypackage文件夾下,在JSP文件中通過(guò)import導(dǎo)入這些class文件。

系統(tǒng)共使用10個(gè)文件,其中包括2個(gè)class文件(Access

ConnBean.class, MyUtil.class),6個(gè)jsp文件(Login.jsp, liuyan.

jsp, writely.jsp, viewly.jsp, writelyd.jsp, delete.jsp),2個(gè)html頁(yè)面(1.html, 2.html)。

AccessConnBean.class 文件完成連接數(shù)據(jù)庫(kù)的功能,MyU

til.class文件完成GB2312碼到Unicode碼的轉(zhuǎn)換,因表單輸入頁(yè)面是GB2312碼,而JSP頁(yè)面的字符串是以Unicode顯示的。

因?yàn)樯婕皩⒆?cè)信息及留言信息寫(xiě)入數(shù)據(jù)庫(kù),系統(tǒng)設(shè)計(jì)了2個(gè)Access數(shù)據(jù)庫(kù)——liuyan.mdb和user_info數(shù)據(jù)庫(kù)。JSP訪問(wèn)Access數(shù)據(jù)庫(kù)的方式是JDBC-ODBC[3]。數(shù)據(jù)庫(kù)的詳細(xì)設(shè)計(jì)將在第三章介紹。

二、留言板系統(tǒng)

(一)系統(tǒng)功能。本系統(tǒng)共包括2個(gè)子系統(tǒng)(用戶(hù)登陸和留言系統(tǒng)),共完成5個(gè)功能:(1)登陸功能。登陸的用戶(hù)必須是數(shù)據(jù)庫(kù)里的用戶(hù),如果不是已經(jīng)注冊(cè)的用戶(hù),則需要點(diǎn)擊注冊(cè)。成功則進(jìn)入注冊(cè)界面,失敗留在當(dāng)前頁(yè)面。(2)注冊(cè)功能。單輸入自己的用戶(hù)名、密碼、郵箱等信息,并通過(guò)writelyd.jsp頁(yè)面寫(xiě)入數(shù)據(jù)庫(kù)。(3)查看留言。已經(jīng)存在的用戶(hù)登錄進(jìn)入系統(tǒng)以后可以查看留言板信息。(4) 添加留言。用戶(hù)輸入正確的用戶(hù)名和密碼以后可以進(jìn)入liuyan.jsp頁(yè)面添加留言,留言?xún)?nèi)容會(huì)通過(guò)write

ly.jsp頁(yè)面添加到數(shù)據(jù)庫(kù)。(5)刪除留言。該模塊需要用戶(hù)登錄,且必須知道管理員的用戶(hù)名和密碼,在2.html輸入要?jiǎng)h除的留言者姓名,通過(guò)delete.jsp頁(yè)面進(jìn)行處理,即可刪除該留言者的留言。

(二)數(shù)據(jù)庫(kù)設(shè)計(jì)。留言版系統(tǒng)采用Access數(shù)據(jù)庫(kù),因?yàn)樵摂?shù)據(jù)庫(kù)設(shè)計(jì)比較簡(jiǎn)單,只存放用戶(hù)注冊(cè)信息及留言信息,涉及了數(shù)據(jù)庫(kù)的插入,查詢(xún),刪除等操作。

該系統(tǒng)包含兩個(gè)數(shù)據(jù)庫(kù): user_info數(shù)據(jù)庫(kù)和liuyan數(shù)據(jù)庫(kù),這兩個(gè)數(shù)據(jù)庫(kù)各自包含同名的一個(gè)表,user_info表包含us

er_id,password, email, name, sex 5個(gè)字段。Liuyan表包含xm,

email, ly, url 4個(gè)字段。

(三)預(yù)處理實(shí)現(xiàn) 。留言板系統(tǒng)涉及用戶(hù)信息的有以下3個(gè)頁(yè)面:Login.jsp, writely.jsp, writelyd.jsp。他們分別完成的功能是使用用戶(hù)名和密碼登陸、將注冊(cè)信息寫(xiě)入數(shù)據(jù)庫(kù)、將留言信息寫(xiě)入數(shù)據(jù)庫(kù)。這3個(gè)頁(yè)面都是處理Web表單提交的信息,涉及信息的內(nèi)容包括用戶(hù)的用戶(hù)名,密碼,郵箱,留言?xún)?nèi)容,姓名,地址等。我們使用預(yù)處理語(yǔ)句處理數(shù)據(jù)庫(kù)的查詢(xún)、插入等操作, 在防止SQL注入的同時(shí)還可以提高系統(tǒng)性能。

以Login.jsp登錄頁(yè)面為例,我們給出關(guān)鍵代碼來(lái)給大家作對(duì)比,先給出普通版本的:

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的一個(gè)別名,我們?cè)?/p>

usebean中簡(jiǎn)化了這個(gè)類(lèi)名,這個(gè)類(lèi)用來(lái)連接Access數(shù)據(jù)庫(kù),根據(jù)數(shù)據(jù)查詢(xún)返回結(jié)果集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();

在這個(gè)版本中,第一句是連接JDBC-ODBC驅(qū)動(dòng),第二句連接user_info用戶(hù)注冊(cè)數(shù)據(jù)庫(kù),第三句是SQL查詢(xún)語(yǔ)句,第四句將SQL語(yǔ)言進(jìn)行預(yù)編譯,并通過(guò)預(yù)編譯語(yǔ)句對(duì)象執(zhí)行查詢(xún),將數(shù)據(jù)結(jié)果返回給ResultSet。

使用PreparedStatement預(yù)處理語(yǔ)句可以將SQL語(yǔ)言進(jìn)行預(yù)編譯,預(yù)處理可以自動(dòng)檢查已經(jīng)綁定好的變量,同時(shí)強(qiáng)制轉(zhuǎn)換這些變量使之與底層數(shù)據(jù)庫(kù)驅(qū)動(dòng)相匹配,它會(huì)忽略掉一些惡意的字符串,在防范SQL注入的同時(shí)因?yàn)槠漕A(yù)編譯的功能可以節(jié)約因多次重復(fù)輸入相同條件的SQL語(yǔ)句而消耗的資源。

總結(jié):該系統(tǒng)經(jīng)測(cè)試運(yùn)行正常,可以實(shí)現(xiàn)登錄、注冊(cè)、添加留言、查看留言、刪除留言等功能。經(jīng)過(guò)Web表單預(yù)提交的數(shù)據(jù)經(jīng)過(guò)SQL預(yù)處理可以防止SQL注入。

參考文獻(xiàn):

[1] 劉玉軒. 基于JSP 和MySQL 的留言板系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與信息技術(shù)。

[2] 張興科. JSP動(dòng)態(tài)網(wǎng)站設(shè)計(jì)項(xiàng)目教程. 北京: 中國(guó)人民大學(xué)出版社,2010

[3] 張志峰等。Java Web技術(shù)整合應(yīng)用與項(xiàng)目實(shí)戰(zhàn)。北京:清華大學(xué)出版社,2010.

[4] 王燕,李明,王惠琴.??Web數(shù)據(jù)庫(kù)的連接技術(shù)及安全控制[J].

猜你喜歡
用戶(hù)名語(yǔ)句頁(yè)面
《護(hù)士進(jìn)修雜志》投稿程序
刷新生活的頁(yè)面
《護(hù)士進(jìn)修雜志》投稿程序
重點(diǎn):語(yǔ)句銜接
《護(hù)士進(jìn)修雜志》投稿程序
機(jī)智的快遞員
如何搞定語(yǔ)句銜接題
網(wǎng)站結(jié)構(gòu)在SEO中的研究與應(yīng)用
淺析ASP.NET頁(yè)面導(dǎo)航技術(shù)
作文語(yǔ)句實(shí)錄