• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      某網(wǎng)站SQL注入漏洞修補(bǔ)

      2017-09-04 12:42:45范義山
      科技視界 2017年9期
      關(guān)鍵詞:修補(bǔ)

      范義山

      【摘 要】網(wǎng)站SQL注入漏洞風(fēng)險(xiǎn)性極大,并且非常普遍,要檢查網(wǎng)站是否有SQL注入漏洞非常容易,但是要修補(bǔ)SQL注入漏洞,還是需要一定的編碼能力和實(shí)際經(jīng)驗(yàn)。本文以一個(gè)真實(shí)的SQL注入漏洞修補(bǔ)過(guò)程為例,講解注入漏洞修補(bǔ)方法。

      【關(guān)鍵詞】SQL注入漏洞;修補(bǔ);正則表達(dá)式

      近日,我單位某部門(mén)網(wǎng)站被教育行業(yè)漏洞報(bào)告平臺(tái)報(bào)告含有SQL注入漏洞,并給出了具體的路徑、參數(shù)和截圖,經(jīng)我們驗(yàn)證漏洞確實(shí)存在。

      1 漏洞現(xiàn)狀

      漏洞一為一個(gè)URL型注入漏洞,網(wǎng)址為http://**.***.com/more3.aspx?menuid=11&;&childid=21,在網(wǎng)址后面手工添加and 1=1,網(wǎng)頁(yè)依然正常顯示,而改成and 1=2之后,網(wǎng)頁(yè)沒(méi)有顯示,說(shuō)明手工添加的數(shù)據(jù)都作為參數(shù)提交到數(shù)據(jù)庫(kù)執(zhí)行了,說(shuō)明存在注入漏洞,如果將添加的內(nèi)容改為其他的SQL語(yǔ)句可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行其他的非授權(quán)操作。

      漏洞二為一個(gè)搜索型注入漏洞,網(wǎng)址為網(wǎng)站首頁(yè)(http://**.***.com/),首頁(yè)左側(cè)有一個(gè)搜索信息功能,后臺(tái)頁(yè)面search.aspx沒(méi)有對(duì)在該文本框中輸入的搜索信息過(guò)濾,如果攻擊者在搜索框中填寫(xiě)了特殊的SQL語(yǔ)句,也會(huì)提交到數(shù)據(jù)庫(kù)執(zhí)行,導(dǎo)致信息泄露,甚至數(shù)據(jù)庫(kù)被破解,后臺(tái)被掌控,帶來(lái)很大的安全隱患。

      漏洞三為一個(gè)登錄型注入漏洞,網(wǎng)址為網(wǎng)站后臺(tái)登陸頁(yè)面(http://**.***.com/login.aspx),在用戶(hù)名或密碼框中輸入拼接的SQL語(yǔ)句(如' or '1'='1),可以直接登陸后臺(tái),網(wǎng)站完全被黑客控制。

      2 漏洞原理

      SQL注入是攻擊者在URL地址、提交的表單數(shù)據(jù)中人為構(gòu)造畸形的SQL語(yǔ)句,欺騙后臺(tái)程序?qū)?shù)據(jù)庫(kù)執(zhí)行未授權(quán)的查詢(xún)、增、刪、改等操作,進(jìn)而獲取網(wǎng)站的管理員賬號(hào),掌握網(wǎng)站控制權(quán),篡改網(wǎng)頁(yè)。

      最簡(jiǎn)單的例子就是在密碼框password中輸入' or '1'='1,那么SQL查詢(xún)語(yǔ)句就變成了:

      select * from users where password='' or '1'='1'

      這個(gè)查詢(xún)永遠(yuǎn)為真,攻擊者不需要用戶(hù)名密碼就可以登錄后臺(tái)。

      3 修補(bǔ)原理'

      根據(jù)SQL注入原理,要阻止SQL注入就是要過(guò)濾掉非法的數(shù)據(jù)提交,不讓非法語(yǔ)句提交到數(shù)據(jù)庫(kù)執(zhí)行。如何識(shí)別非法數(shù)據(jù),就成為漏洞修補(bǔ)的關(guān)鍵??梢詮恼磧煞矫鎭?lái)判斷數(shù)據(jù)是否合法,如果能確定合法數(shù)據(jù)的字符組合特征,并且非法數(shù)據(jù)肯定不符合該字符組合特征,則可以從識(shí)別合法數(shù)據(jù)的角度來(lái)過(guò)濾數(shù)據(jù)。如果合法數(shù)據(jù)的字符組合特征也包含了非法數(shù)據(jù)的可能,而非法數(shù)據(jù)的特征比較明顯,則可以從識(shí)別非法數(shù)據(jù)的角度來(lái)過(guò)濾數(shù)據(jù)。

      設(shè)定合適的字符組合規(guī)則和選用合適的工具進(jìn)行匹配就是數(shù)據(jù)過(guò)濾的關(guān)鍵。正則表達(dá)式(又稱(chēng)規(guī)則表達(dá)式,在代碼中常簡(jiǎn)寫(xiě)為regex、regexp或RE)就是一個(gè)非常合適的匹配工具,可以用來(lái)對(duì)提交的數(shù)據(jù)與預(yù)先設(shè)定好的規(guī)則進(jìn)行匹配。主流的程序設(shè)計(jì)語(yǔ)言都支持利用正則表達(dá)式進(jìn)行字符串操作。

      4 修補(bǔ)方案

      4.1 漏洞一修補(bǔ)方案

      因?yàn)閙enuid,childid兩個(gè)參數(shù)的合法值全部為數(shù)字,而非法數(shù)據(jù)含SQL語(yǔ)句,肯定不會(huì)全部為數(shù)字,所以可以從識(shí)別合法數(shù)據(jù)的角度來(lái)進(jìn)行數(shù)據(jù)過(guò)濾。

      正則表達(dá)式設(shè)定為\d{1,5},即1到5位數(shù)字。采用if(!Regex.IsMatch(menuid, @"^\d{1,5}$"))來(lái)判斷menuid參數(shù)是否不匹配該正則表達(dá)式,如果不匹配,則彈出警告,不提交到數(shù)據(jù)庫(kù)中執(zhí)行。其中^表示匹配字符串的開(kāi)始,$表示匹配字符串的結(jié)束,@符號(hào)表示后面字符串中的轉(zhuǎn)義序列“不”被處理。代碼如下:

      using System.Text.RegularExpressions; /*引入命名空間*/

      if(!Regex.IsMatch(menuid,?@"^\d{1,5}$"))

      {

      Response.Write ("檢測(cè)到SQL注入危險(xiǎn), 請(qǐng)勿非法操作!");

      Response.End();

      }

      if(!Regex.IsMatch(childid,?@"^\d{1,5}$"))

      {

      Response.Write ("檢測(cè)到SQL注入危險(xiǎn), 請(qǐng)勿非法操作!");

      Response.End();

      }

      4.2 漏洞二修補(bǔ)方案

      因?yàn)楹戏〝?shù)據(jù)為字符串,而非法數(shù)據(jù)也為字符串,所以不好從識(shí)別合法數(shù)據(jù)的角度進(jìn)行數(shù)據(jù)過(guò)濾。但非法數(shù)據(jù)中含select、update、delete、insert、or、and、=、等SQL語(yǔ)句中的關(guān)鍵詞,可以從識(shí)別非法數(shù)據(jù)的角度來(lái)進(jìn)行數(shù)據(jù)過(guò)濾。代碼如下:

      using System.Text.RegularExpressions;

      string pattern =@"'|;|#|([\s\b+()]+(select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b+]*)";

      Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);

      if (rgx.IsMatch(title)) /* title為搜索框信息變量 */

      {

      Response.Write ("檢測(cè)到SQL注入危險(xiǎn), 請(qǐng)勿非法操作!");

      Response.End();

      }

      4.3 漏洞三修補(bǔ)方案

      漏洞三的修補(bǔ)和漏洞二一樣,也是從識(shí)別非法數(shù)據(jù)的角度進(jìn)行過(guò)濾,只需將方案二中的title變量改成用戶(hù)名、密碼的變量username、password,然后分別檢測(cè)即可。將漏洞二、漏洞三設(shè)置成兩個(gè)類(lèi)別的目的是為了提醒程序員,黑客可以從搜索框、用戶(hù)名密碼框進(jìn)行注入。

      5 系統(tǒng)調(diào)試

      5.1 手工測(cè)試

      對(duì)漏洞一,采用單引號(hào)測(cè)試法(在網(wǎng)址后面添加單引號(hào))、1=1測(cè)試法(在網(wǎng)址后面添加 and 1=1或and 1=2),發(fā)現(xiàn)都會(huì)彈出注入警告,不再出現(xiàn)正常顯示的網(wǎng)頁(yè)或錯(cuò)誤代碼,證明非法數(shù)據(jù)被識(shí)別,未提交數(shù)據(jù)庫(kù)執(zhí)行。

      對(duì)漏洞二、三,分別在搜索框、用戶(hù)名密碼框中輸入' or '1'='1,發(fā)現(xiàn)都會(huì)彈出注入警告,不再出現(xiàn)正常顯示的網(wǎng)頁(yè)或錯(cuò)誤代碼或登錄成功,證明非法數(shù)據(jù)未提交數(shù)據(jù)庫(kù)執(zhí)行。

      5.2 工具軟件測(cè)試

      采用工具軟件SQLMAP進(jìn)行注入測(cè)試,均提示” [CRITICAL] all tested parameters appear to be not injectable” ,說(shuō)明已經(jīng)不可注入,證明漏洞已經(jīng)修補(bǔ)。

      6 結(jié)語(yǔ)

      注入漏洞風(fēng)險(xiǎn)性極大,應(yīng)該引起足夠重視。正則表達(dá)式能有效的對(duì)數(shù)據(jù)進(jìn)行合法性檢驗(yàn),過(guò)濾非法數(shù)據(jù),保障網(wǎng)站安全。另外,還應(yīng)在防火墻上做相應(yīng)的防護(hù)策略,阻止黑客對(duì)網(wǎng)站的滲透測(cè)試,滲透測(cè)試雖然不一定能成功,但會(huì)嚴(yán)重占用服務(wù)器CPU、內(nèi)存資源,降低網(wǎng)站反應(yīng)速度,甚至對(duì)網(wǎng)站的穩(wěn)定性、可用性帶來(lái)很大威脅。最后,采用網(wǎng)頁(yè)靜態(tài)化技術(shù)可以有效降低網(wǎng)站被注入的危險(xiǎn),提高網(wǎng)站安全性。

      [責(zé)任編輯:朱麗娜]endprint

      猜你喜歡
      修補(bǔ)
      腹腔鏡手術(shù)治療胃穿孔療效分析
      淺析橋梁工程混凝土裂縫控制及修補(bǔ)技術(shù)
      科技視界(2016年18期)2016-11-03 23:35:38
      淺談建筑混凝土結(jié)構(gòu)裂縫的修補(bǔ)設(shè)計(jì)與方法
      試議混凝土施工技術(shù)在道橋施工中的應(yīng)用
      科技視界(2016年16期)2016-06-29 07:46:19
      淺談瀝青路面常見(jiàn)病害及維護(hù)措施
      科技視界(2016年14期)2016-06-08 16:40:41
      瀝青路面坑槽成因及修補(bǔ)措施分析
      科技視界(2016年11期)2016-05-23 20:11:09
      G30線(xiàn)永山高速公路瀝青路面修補(bǔ)常見(jiàn)問(wèn)題原因分析及質(zhì)量控制措施
      科技視界(2016年8期)2016-04-05 08:50:00
      技術(shù)的使命:在“修補(bǔ)”中完善設(shè)計(jì)
      鋼板粘貼法在某高樁碼頭加固改造中的應(yīng)用
      混凝土裂縫修補(bǔ)過(guò)程中新材料的作用
      居業(yè)(2015年6期)2015-09-05 19:41:27
      蛟河市| 大关县| 读书| 黎川县| 临邑县| 蓬莱市| 西林县| 靖远县| 黄陵县| 前郭尔| 上犹县| 蕉岭县| 广汉市| 钦州市| 象州县| 万盛区| 盈江县| 乃东县| 德保县| 肇州县| 故城县| 台北县| 陇南市| 盐津县| 明水县| 津南区| 仁布县| 茌平县| 普兰县| 石狮市| 禄劝| 彝良县| 肥乡县| 始兴县| 繁峙县| 江门市| 遵义市| 卓资县| 天峨县| 甘泉县| 军事|