999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JSP+MySQL的用戶登錄系統(tǒng)SQL注入實(shí)例及防范

2020-09-16 14:36:42丁佳
關(guān)鍵詞:頁(yè)面數(shù)據(jù)庫(kù)用戶

◆丁佳

安全模型、算法與編程

基于JSP+MySQL的用戶登錄系統(tǒng)SQL注入實(shí)例及防范

◆丁佳

(山東維平信息安全測(cè)評(píng)技術(shù)有限公司 山東 250000)

SQL注入攻擊是常用攻擊方式之一,它是由于程序員疏忽而產(chǎn)生的一種信息安全漏洞。本文通過(guò)在基于JSP和MySQL技術(shù)編寫的用戶登錄程序演示SQL注入繞過(guò)登錄實(shí)例,詳細(xì)分析注入漏洞產(chǎn)生的原因,從代碼層和平臺(tái)層兩個(gè)方面有針對(duì)性地提出有效的防范SQL注入攻擊方法,并提出一些可行代碼,確保數(shù)據(jù)庫(kù)中信息安全。

JSP;MySQL;SQL注入攻擊;數(shù)據(jù)庫(kù);信息安全

JSP全稱是Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)技術(shù)。它使用JSP標(biāo)簽在HTNML網(wǎng)頁(yè)中插入Java代碼。標(biāo)簽通常以<%開頭以%>結(jié)束。JSP為一種Java servlet,它可以通過(guò)網(wǎng)頁(yè)表單獲取用戶輸入數(shù)據(jù)、訪問(wèn)數(shù)據(jù)庫(kù)及其他數(shù)據(jù)源,然后動(dòng)態(tài)地創(chuàng)建網(wǎng)頁(yè),用于實(shí)現(xiàn)Java web應(yīng)用程序的用戶界面部分[1]。

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)(Relational Database Management System),它開源免費(fèi),能夠跨平臺(tái),支持分布式,性能良好,能與JSP、PHP等Web開發(fā)語(yǔ)言配合。

通過(guò)JSP和MySQL配合,基于Tomcat下,能夠完成中小型系統(tǒng)的開發(fā)。

1 SQL注入原理

SQL注入攻擊本質(zhì)是攻擊者將惡意查詢字符串通過(guò)Web表單遞交,以域名訪問(wèn)或頁(yè)面請(qǐng)求等方式發(fā)送給服務(wù)器,最終達(dá)到欺騙數(shù)據(jù)庫(kù)執(zhí)行惡意的查詢字符串。更詳細(xì)來(lái)說(shuō),它是利用現(xiàn)有程序,通過(guò)在表單,域名地址,post或get請(qǐng)求上的漏洞,輸入惡意的SQL語(yǔ)句,使后臺(tái)數(shù)據(jù)庫(kù)引擎不是按照設(shè)計(jì)者意圖執(zhí)行命令,從而得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù)。Web服務(wù)器的注入過(guò)程如圖1所示。

圖1 Web服務(wù)器的注入過(guò)程

2 登錄系統(tǒng)實(shí)例

本文要基于一個(gè)實(shí)際系統(tǒng)后臺(tái)進(jìn)行實(shí)例分析,因此,解析系統(tǒng)各方面的設(shè)計(jì),能夠?yàn)榱私釹QL注入漏洞產(chǎn)生深層次的原由提供一個(gè)理論基礎(chǔ)。該系統(tǒng)開發(fā)環(huán)境如下:MyEclipse10,MySQL Server 5.0,apache-tomcat-7.0.99。

2.1 數(shù)據(jù)庫(kù)數(shù)據(jù)表設(shè)計(jì)

數(shù)據(jù)庫(kù)命名為sqldemo,用戶表命名為user,其中包含賬號(hào),密碼,名字三個(gè)字段,庫(kù)中字段定義如圖2所示。

圖2 字段定義

利用工具NavicatforMySQL在user插入數(shù)據(jù),如圖3所示,user表中共有三條記錄。

圖3 user的數(shù)據(jù)記錄

2.2 系統(tǒng)頁(yè)面設(shè)計(jì)

(1)登錄頁(yè)面布局

登錄頁(yè)面命名為login.jsp,通過(guò)HTML設(shè)計(jì)登錄表單,通過(guò)post方法將表單數(shù)據(jù)提交給loginsuccess.jsp進(jìn)行處理,登錄頁(yè)面布局如圖4所示。

圖4 登錄頁(yè)面展示

(2)后臺(tái)頁(yè)面布局

后臺(tái)主頁(yè)命名為lead.jsp,通過(guò)login.jsp表單提交正確賬號(hào)密碼后,將會(huì)跳轉(zhuǎn)至該頁(yè)面,頁(yè)面布局如圖5所示。

圖5 后臺(tái)頁(yè)面布局

(3)登錄功能代碼設(shè)計(jì)

當(dāng)通過(guò)表單提交賬號(hào)密碼時(shí),系統(tǒng)要能查詢?cè)撚脩羰欠翊嬖冢娇商D(zhuǎn)至后臺(tái)頁(yè)面,代碼設(shè)計(jì)如下:

3 SQL注入攻擊實(shí)例與防范

3.1 攻擊演示

正常登錄的情況應(yīng)為當(dāng)用戶輸入與數(shù)據(jù)庫(kù)中存儲(chǔ)的記錄一致的賬號(hào)密碼時(shí),跳轉(zhuǎn)至后臺(tái)頁(yè)面。但經(jīng)過(guò)檢測(cè),發(fā)現(xiàn)該程序存在SQL注入漏洞,若用戶輸入’or1=1#,再輸入任意密碼,便可實(shí)現(xiàn)無(wú)賬號(hào)密碼登錄后臺(tái),如圖6所示。

圖6 登錄漏洞注入

3.2 原因分析

驗(yàn)證身份登錄SQL語(yǔ)句是:select * from user where acnumber='"+acn+"' and password='"+pw+"'",當(dāng)acn=“’or 1=1#”(單引號(hào)用于閉合,#注釋后面語(yǔ)句),語(yǔ)句就被構(gòu)造成select * from user where acnumber='’or 1=1#' and password=''",由于where條件中or 1=1條件永為真,”#”又將后面的語(yǔ)句注釋,使其不起作用,因此若執(zhí)行成功將返回一個(gè)非空集合從而成功騙過(guò)系統(tǒng),獲取合法身份。

3.3 防范方法

針對(duì)JSP+MySQL環(huán)境以及代碼上編寫缺陷,本文將分別從代碼層和平臺(tái)層兩個(gè)方面提出有效防范方法。

3.3.1代碼層防御

在代碼層上實(shí)現(xiàn)防御,關(guān)鍵是要關(guān)注與SQL注入相關(guān)的安全編碼行為[2]。SQL注入漏洞很大程度上是由于代碼編寫人員不嚴(yán)謹(jǐn),缺乏實(shí)踐經(jīng)驗(yàn)而導(dǎo)致,因此,提高代碼層面上的安全性可以有效防范SQL注入攻擊。

(1)使用PreparedStatement。

PreparedStatement是Statement的子接口,它采用預(yù)編譯語(yǔ)句集,可以傳入帶占位符的SQL語(yǔ)句,極大地提高了安全性。上文的代碼是使用Statement形式的SQL語(yǔ)句的形式,直接將用戶輸入代入SQL中并執(zhí)行。而當(dāng)使用PreparedStatement,則可以將SQL作為參數(shù)傳入,不再對(duì)SQL語(yǔ)句進(jìn)行解析,避免了SQL注入的問(wèn)題,代碼如下:

(2)使用正則表達(dá)式過(guò)濾傳入?yún)?shù)

正則表達(dá)式用于描述一種字符串的匹配模式,可以用來(lái)檢查一個(gè)字符串中是否含有某種子串、或從字符串中取出某個(gè)符合某個(gè)條件的數(shù)據(jù)等。利用正則表達(dá)式,可將實(shí)現(xiàn)SQL注入攻擊的特殊字符過(guò)濾,如單引號(hào),#字符等。當(dāng)將外部輸入的參數(shù)中的SQL關(guān)鍵詞過(guò)濾,就可以從源頭上阻止SQL注入攻擊。以上文實(shí)例為例,對(duì)利用單引號(hào)實(shí)現(xiàn)繞過(guò)用戶認(rèn)證機(jī)制的’or 1=1#語(yǔ)句,可以構(gòu)造如下表達(dá)式:

/(\%27)|(’)|(--)|(\%23)|(#)/ix

“(\%27)|(’)”和“(\%23)”分別為匹配單引號(hào)、“#”字符的URL編碼值或其十六進(jìn)制值,“i”表示將匹配到字母的大小寫進(jìn)行忽略[3]。通過(guò)該表達(dá)式檢測(cè)用戶輸入字符是否合法,避免了用戶利用單引號(hào)和“#”字符構(gòu)造惡意輸入,代碼如下:

(3)字符串過(guò)濾

字符串過(guò)濾是一個(gè)比較通過(guò)的方法,與正則表達(dá)式相似,它通過(guò)設(shè)定過(guò)濾參數(shù),將引起SQL注入攻擊的SQL語(yǔ)句中常見的字符串進(jìn)行黑名單標(biāo)記,如:select,union,and,or,update,delete等。凡是在“黑名單”中的字符串,一律視為非法輸入,代碼如下:

(4)JSP頁(yè)面判斷代碼

在JSP頁(yè)面當(dāng)中可以使用Javascript在客戶端進(jìn)行不安全字符屏蔽。Javascript是一種以函數(shù)優(yōu)先的輕量級(jí)語(yǔ)言,可以操縱HTML各種頁(yè)面的對(duì)象,因此,可以通過(guò)Javascript在客戶端進(jìn)行數(shù)據(jù)驗(yàn)證。主要方法是通過(guò)編寫function函數(shù),在用戶提交輸入數(shù)據(jù)時(shí),觸發(fā)函數(shù)執(zhí)行,完成相應(yīng)檢測(cè)屏蔽功能。本文以檢查是否含有“‘”,“#”為例,代碼如下:

(4)進(jìn)行編碼輸出

編碼輸出是對(duì)發(fā)給數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行驗(yàn)證。雖有正則表達(dá)式、過(guò)濾函數(shù)等對(duì)輸入的數(shù)據(jù)進(jìn)行驗(yàn)證,但也不一定保證發(fā)給數(shù)據(jù)庫(kù)的數(shù)據(jù)是百分之百的安全。比如,在白名單里,類似O’Boyle這樣的名稱是有效的輸入。當(dāng)類似這樣的數(shù)據(jù)被成功存儲(chǔ)在數(shù)據(jù)庫(kù)中并被再使用時(shí),基于對(duì)包含在數(shù)據(jù)庫(kù)中的數(shù)據(jù)的內(nèi)在信任,數(shù)據(jù)并不會(huì)再被驗(yàn)證輸入,從而可能引發(fā)二階SQL注入。因此,要避免該情況的發(fā)生,有必要對(duì)發(fā)送給數(shù)據(jù)庫(kù)的內(nèi)容進(jìn)行編碼。在MySQL中,以單引號(hào)作為字符串的結(jié)束符,因而有必要對(duì)包含在字符串中的單引號(hào)進(jìn)行編碼,使輸入的單引號(hào)被當(dāng)作字符串中的一部分,而不是字符串結(jié)束符。例如,使用兩個(gè)單引號(hào)替換單個(gè)引號(hào),使用反斜線()替換單引號(hào),代碼如下所示:

sql =replace(“’”,””);//使用反斜線引用單引號(hào)

set @enc = replace(@input, char(39), char(92, 39));

//存儲(chǔ)過(guò)程中使用字符編碼進(jìn)行替換,92是、39為反斜線和單引號(hào)的ASCII碼

3.3.2平臺(tái)層防御

在平臺(tái)層防御上注重的是運(yùn)行時(shí)的保護(hù),能與安全代碼互補(bǔ)形成一種多層的安全架構(gòu)[2],以減少可利用的SQL注入漏洞帶來(lái)的影響。本文基于MySQL數(shù)據(jù)庫(kù)環(huán)境,從最小化不必要信息的泄露方面提出以下方法:

(1)數(shù)據(jù)權(quán)限控制

數(shù)據(jù)權(quán)限是在用戶具有了某一功能權(quán)限的基礎(chǔ)上,規(guī)定用戶可以訪問(wèn)的數(shù)據(jù)范圍[4]。MySQL服務(wù)器是通過(guò)權(quán)限表來(lái)控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),可以對(duì)用戶進(jìn)行權(quán)限設(shè)置,比如限制用戶訪問(wèn)庫(kù)、表,限制用戶對(duì)表執(zhí)行的CRUD操作,限制用戶登錄的IP或域名,限制授權(quán)等。SQL注入攻擊的目的就是能夠獲取數(shù)據(jù)庫(kù)中的重要信息,當(dāng)重要的信息需要相應(yīng)權(quán)限才能訪問(wèn)時(shí),沒有權(quán)限的攻擊者是無(wú)法竊取數(shù)據(jù)庫(kù)中的數(shù)據(jù),因此,數(shù)據(jù)權(quán)限控制,是針對(duì)SQL注入以及其他非法操作所提出的一種保護(hù)信息的安全措施。

(2)敏感信息加密

當(dāng)服務(wù)器遭受到SQL注入攻擊時(shí),若一些敏感信息,如密碼,以明文形式存在,在用戶信息表泄露之后,這些信息將被一覽無(wú)余。攻擊者則直接獲取這些合法用戶信息,并再借用這些信息的合法性假冒正常用戶,造成更嚴(yán)重的后果。因此,對(duì)敏感信息的加密,可以保證系統(tǒng)合法用戶的敏感數(shù)據(jù),有效降低該類數(shù)據(jù)泄露的危險(xiǎn)。MD5是常用的加密算法之一,借助MD5,加密用戶密碼,以密文形式存儲(chǔ)在數(shù)據(jù)庫(kù)中。以MySQL數(shù)據(jù)庫(kù)為例,添加新用戶,MD5加密密碼:insert into user (acnumber,name,password) values(8888,'hhh',md5('1478')),效果如圖7所示。

圖7 MD5加密

(3)關(guān)閉數(shù)據(jù)庫(kù)遠(yuǎn)程連接

當(dāng)數(shù)據(jù)庫(kù)支持遠(yuǎn)程查詢本地?cái)?shù)據(jù)資源時(shí),攻擊者在通過(guò)之前注入驗(yàn)證,能夠直接遠(yuǎn)程控制所連網(wǎng)絡(luò)的數(shù)據(jù)庫(kù)。基于本文后臺(tái)系統(tǒng)環(huán)境,默認(rèn)情況下,普通用戶并不需要這種權(quán)限,為了數(shù)據(jù)庫(kù)安全考慮,移除遠(yuǎn)程連接權(quán)限,以確保本地必需的登錄權(quán)限和角色,從而避免攻擊者通過(guò)遠(yuǎn)程創(chuàng)建新的銜接。首先使用最高權(quán)限r(nóng)oot賬戶登錄數(shù)據(jù)庫(kù),輸入use mysql選擇MySQL數(shù)據(jù)庫(kù),接著輸入指令revoke all privileges on *.* from 'root'@'%'撤回,再通過(guò)指令delete from user where User="root" and Host="%"刪除用戶,最后通過(guò)指令flush privileges進(jìn)行刷新。在完成全部操作之后,可以通過(guò)select *from user確定存在的用戶。

4 結(jié)語(yǔ)

本文詳細(xì)解釋使用JSP和MySQL技術(shù)編寫的用戶登錄系統(tǒng),根據(jù)實(shí)例對(duì)常見登錄注入進(jìn)行解析SQL注入攻擊的原理以及產(chǎn)生的原因,并基于環(huán)境設(shè)置,提出有效的防范方法以及詳細(xì)的相關(guān)代碼,具有一定的實(shí)用性。但由于系統(tǒng)簡(jiǎn)易的局限性,無(wú)法從不同數(shù)據(jù)庫(kù)進(jìn)行全面考慮,因此在具體應(yīng)用時(shí),不能全盤生搬硬套,必須根據(jù)應(yīng)用環(huán)境舉一反三,提高代碼的規(guī)范性和安全性,保護(hù)數(shù)據(jù)庫(kù)安全,實(shí)現(xiàn)信息安全。

[1]菜鳥教程.JSP教程[EB/OL].https://www.runoob.com/jsp/jsp-intro.html,2020-06.

[2]Justin Clarke著,施宏斌譯.SQL注入攻擊與防御(第二版)[M].清華大學(xué)出版社, 2017.08.

[3]余劉瑯,汪彩萍,程克勤.基于Snort的檢測(cè)SQL注入和跨站腳本攻擊的正則表達(dá)式的探討[J].合肥工業(yè)大學(xué)學(xué)報(bào),2017(08).

[4]潘蕾.網(wǎng)站注冊(cè)及登錄安全性研究[J].咸寧學(xué)院學(xué)報(bào),2012(7).

猜你喜歡
頁(yè)面數(shù)據(jù)庫(kù)用戶
大狗熊在睡覺
刷新生活的頁(yè)面
數(shù)據(jù)庫(kù)
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數(shù)據(jù)庫(kù)
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
如何獲取一億海外用戶
主站蜘蛛池模板: 99热这里只有精品在线观看| 久久精品欧美一区二区| 亚洲天堂久久| 在线精品视频成人网| 国产全黄a一级毛片| 色综合综合网| 久久99精品久久久久纯品| 国产网友愉拍精品视频| 色婷婷电影网| 亚洲成网777777国产精品| 1769国产精品免费视频| 亚洲美女高潮久久久久久久| 欧美日韩国产成人在线观看| 国产99在线| 亚洲第一成年免费网站| 在线观看精品自拍视频| AV片亚洲国产男人的天堂| 国产毛片网站| 久久精品国产在热久久2019| 久久久久亚洲av成人网人人软件| 国产成人精品免费视频大全五级| 54pao国产成人免费视频| 视频二区中文无码| 日韩一级毛一欧美一国产| 欧美不卡二区| 就去吻亚洲精品国产欧美| 97成人在线观看| 国产精品久久久久久久久kt| 91精品aⅴ无码中文字字幕蜜桃 | 国产AV毛片| 国产综合精品一区二区| 国产在线高清一级毛片| 国产三级视频网站| 国产成人综合在线观看| 色九九视频| 88av在线| 久久久久国产精品嫩草影院| 国产原创第一页在线观看| 在线a网站| 精品夜恋影院亚洲欧洲| 国产精品黑色丝袜的老师| 免费无码一区二区| 福利姬国产精品一区在线| 91精品国产情侣高潮露脸| 另类综合视频| 一级成人a做片免费| 欧美另类图片视频无弹跳第一页| 亚洲区一区| 国产理论一区| 日韩高清无码免费| 亚洲AV成人一区国产精品| 2020国产精品视频| 久久综合结合久久狠狠狠97色| 国产精品福利导航| 色视频久久| 精品视频福利| 91成人试看福利体验区| 国产97视频在线观看| 欧美成人区| 久久久精品无码一区二区三区| 久久精品中文字幕少妇| 午夜国产在线观看| 国产成人无码Av在线播放无广告| 在线播放精品一区二区啪视频 | 99久久精品国产综合婷婷| 99九九成人免费视频精品| 成人国产精品网站在线看| 色网站在线视频| 青草国产在线视频| 人妻少妇乱子伦精品无码专区毛片| 黄色网址手机国内免费在线观看| 精品人妻一区二区三区蜜桃AⅤ| 香蕉eeww99国产在线观看| 人人妻人人澡人人爽欧美一区| 九九热这里只有国产精品| 欧美a在线视频| 国产成人综合网| 亚洲无码视频图片| 97国产精品视频自在拍| 国产精品无码影视久久久久久久| 在线不卡免费视频| 国产精品亚洲一区二区在线观看|