Web安全與防護(hù) (微課版) 課件 03-3 項(xiàng)目三 任務(wù)三SQL注入漏洞檢測(cè)與驗(yàn)證;03-4 項(xiàng)目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第1頁(yè)
Web安全與防護(hù) (微課版) 課件 03-3 項(xiàng)目三 任務(wù)三SQL注入漏洞檢測(cè)與驗(yàn)證;03-4 項(xiàng)目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第2頁(yè)
Web安全與防護(hù) (微課版) 課件 03-3 項(xiàng)目三 任務(wù)三SQL注入漏洞檢測(cè)與驗(yàn)證;03-4 項(xiàng)目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第3頁(yè)
Web安全與防護(hù) (微課版) 課件 03-3 項(xiàng)目三 任務(wù)三SQL注入漏洞檢測(cè)與驗(yàn)證;03-4 項(xiàng)目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第4頁(yè)
Web安全與防護(hù) (微課版) 課件 03-3 項(xiàng)目三 任務(wù)三SQL注入漏洞檢測(cè)與驗(yàn)證;03-4 項(xiàng)目四 任務(wù)四SQL注入漏洞修復(fù)與規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)繞過(guò)后臺(tái)登錄(字符型注入)文章頁(yè)面注入(數(shù)字型注入)搜索框注入(搜索框注入)SQL注入漏洞進(jìn)階能夠檢測(cè)出系統(tǒng)中存在的漏洞。能夠?qū)QL注入漏洞進(jìn)行安全驗(yàn)證。任務(wù)三

SQL注入漏洞檢測(cè)與驗(yàn)證項(xiàng)目三

安全的數(shù)據(jù)庫(kù)交換目錄CONTENTS01/繞過(guò)后臺(tái)登錄(字符型注入)02/文章頁(yè)面注入(數(shù)字型注入)03/搜索框注入(搜索框注入)04/SQL注入漏洞進(jìn)階繞過(guò)后臺(tái)登錄(字符型注入)01什么是驗(yàn)繞過(guò)后臺(tái)登錄(字符型注入)?字符型注入是指攻擊者通過(guò)輸入惡意的SQL語(yǔ)句來(lái)繞過(guò)應(yīng)用程序的輸入驗(yàn)證,并執(zhí)行未經(jīng)授權(quán)的操作。常見(jiàn)的字符型注入攻擊有繞過(guò)后臺(tái)登錄、獲取敏感信息、修改數(shù)據(jù)等。繞過(guò)后臺(tái)登錄是一種常見(jiàn)的字符型注入攻擊,攻擊者通過(guò)修改登錄表單中的用戶(hù)名和密碼的輸入值,構(gòu)造出惡意的SQL語(yǔ)句來(lái)實(shí)現(xiàn)繞過(guò)登錄的目的。通過(guò)修改登錄表單的輸入值來(lái)實(shí)現(xiàn)繞過(guò)登錄。完整代碼見(jiàn)教材3.3.1攻擊者可以在登錄表單中輸入類(lèi)似于'or1=1--的字符串繞過(guò)后臺(tái)登錄(字符型注入)01SELECT*FROMusersWHEREusername=''

or1=1--'ANDpassword=''由于or1=1始終為真,攻擊者將繞過(guò)用戶(hù)名和密碼的驗(yàn)證,并成功登錄到后臺(tái)。查看博客系統(tǒng)源碼admin/check.php文件。這段代碼的SQL注入漏洞在于用戶(hù)登錄驗(yàn)證的SQL查詢(xún)中。由于用戶(hù)輸入的用戶(hù)名和密碼沒(méi)有經(jīng)過(guò)充分的驗(yàn)證和過(guò)濾,直接拼接到SQL語(yǔ)句中,導(dǎo)致攻擊者可以在輸入的用戶(hù)名或密碼中注入惡意SQL代碼,改變SQL查詢(xún)語(yǔ)句的執(zhí)行邏輯。完整代碼見(jiàn)教材3.3.1繞過(guò)后臺(tái)登錄(字符型注入)01admin/check.php如果黑客在用戶(hù)名輸入框中輸入admin'--,密碼輸入框中輸入任意密碼。那么會(huì)因?yàn)?-表示注釋掉后面的SQL代碼,因此上面的查詢(xún)語(yǔ)句實(shí)際上只驗(yàn)證了用戶(hù)名為admin,而不會(huì)驗(yàn)證密碼是否正確,從而繞過(guò)了認(rèn)證,進(jìn)入管理員界面,實(shí)施進(jìn)一步的攻擊。繞過(guò)后臺(tái)登錄(字符型注入)01SELECT*FROMblog_adminWHEREusername='admin'--'ANDpassword='任意密碼'登錄頁(yè)面http://localhost/admin/login.php。在用戶(hù)名輸入框面輸入任意用戶(hù)名,密碼框中輸入任意密碼。啟動(dòng)Burp在Intruder中開(kāi)啟截?cái)?。在登錄?yè)面中點(diǎn)擊提交,Burp中攔截到請(qǐng)求將請(qǐng)求轉(zhuǎn)發(fā)至重發(fā)器(Repeater),先不修改用戶(hù)名密碼測(cè)試是否能夠成功登錄。響應(yīng)結(jié)果。繞過(guò)后臺(tái)登錄(字符型注入)01可以看到服務(wù)器響應(yīng)了‘用戶(hù)名或密碼錯(cuò)誤’,修改用戶(hù)名為1111'or1=1--并輸入新的驗(yàn)證碼點(diǎn)擊發(fā)送請(qǐng)求(Send)響應(yīng)結(jié)果。并看見(jiàn)了服務(wù)器響應(yīng)的“登錄成功”,說(shuō)明我們所構(gòu)造的字符型SQL注入語(yǔ)句執(zhí)行成功。什么是文章頁(yè)面注入(數(shù)字型注入)?數(shù)字型注入是SQL注入的一種形式,它是通過(guò)在SQL語(yǔ)句中嵌入惡意數(shù)字來(lái)實(shí)現(xiàn)的。與字符型注入不同,數(shù)字型注入不是通過(guò)將SQL語(yǔ)句的字符串參數(shù)替換為惡意代碼字符串來(lái)實(shí)現(xiàn)的,而是將數(shù)字參數(shù)替換為惡意代碼數(shù)字來(lái)實(shí)現(xiàn)的。文章頁(yè)面注入(數(shù)字型注入)02數(shù)字型注入是指攻擊者在輸入框中輸入的字符串被直接拼接到SQL語(yǔ)句中,例如在登錄時(shí),攻擊者輸入'or'1'='1,文章頁(yè)面注入(數(shù)字型注入)02攻擊者利用了SQL的邏輯運(yùn)算符或注釋符號(hào)(如--或/**/),將原本的SQL語(yǔ)句改變?yōu)樽约核谕恼Z(yǔ)句,從而繞過(guò)了應(yīng)用程序的驗(yàn)證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入是指攻擊者在輸入框中輸入的數(shù)字被直接拼接到SQL語(yǔ)句中,例如在文章搜索時(shí),攻擊者輸入1or1=1。SELECT*FROMusersWHEREusername=''

OR

'1'='1'

AND

password=''SELECT*FROMarticlesWHEREid=1OR1=1攻擊者利用了SQL的布爾邏輯運(yùn)算符,將原本的SQL語(yǔ)句改變?yōu)樽约核谕恼Z(yǔ)句,從而繞過(guò)了應(yīng)用程序的驗(yàn)證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入通常發(fā)生在數(shù)字類(lèi)型的查詢(xún)參數(shù)上,例如整數(shù)和浮點(diǎn)數(shù)。例如,一個(gè)網(wǎng)站可能有一個(gè)頁(yè)面,該頁(yè)面的URL包含一個(gè)數(shù)字參數(shù),用于選擇要顯示的文章。攻擊者可以通過(guò)向URL中添加一個(gè)額外的數(shù)字參數(shù)并在其中嵌入SQL代碼,來(lái)嘗試注入惡意代碼。/article.php?id=1攻擊者可以通過(guò)在id參數(shù)中注入SQL代碼來(lái)獲取其他文章的內(nèi)容。/article.php?id=1;SELECT*FROMarticlesWHEREid=2$id來(lái)自于用戶(hù)通過(guò)id參數(shù)提交的值,并且未經(jīng)過(guò)過(guò)濾和轉(zhuǎn)義。完整代碼見(jiàn)教材3.3.2apps/view.php文章頁(yè)面注入(數(shù)字型注入)02訪(fǎng)問(wèn)http://localhost/index.php?class=view&id=1頁(yè)

面。文章頁(yè)面注入(數(shù)字型注入)02文章頁(yè)面注入(數(shù)字型注入)02嘗試SQL注入:http://localhost/index.php?class=view&id=1%20and%201=1,訪(fǎng)問(wèn)頁(yè)面發(fā)現(xiàn)響應(yīng)正常,說(shuō)明SQL語(yǔ)句成功執(zhí)行。再?lài)L試訪(fǎng)問(wèn)http://localhost/index.php?class=view&id=1%20and%201=2,使查詢(xún)條件不成立查看響應(yīng)為異常頁(yè)面說(shuō)明該處存在注入點(diǎn)。文章頁(yè)面注入(數(shù)字型注入)02搜索框注入(搜索框注入)03什么是搜索框注入(搜索框注入)?搜索框注入是一種常見(jiàn)的SQL注入類(lèi)型,攻擊者通過(guò)在網(wǎng)站的搜索框中輸入惡意的搜索參數(shù),從而修改SQL查詢(xún)語(yǔ)句,獲取未經(jīng)授權(quán)的信息。搜索框注入屬于字符型注入,和前面的數(shù)字型注入有所不同。搜索框注入的原理與字符型注入類(lèi)似,攻擊者通過(guò)在搜索框中輸入特定的字符,改變SQL語(yǔ)句的執(zhí)行,達(dá)到繞過(guò)用戶(hù)驗(yàn)證或者篡改數(shù)據(jù)的目的。常見(jiàn)的攻擊方式包括:?jiǎn)我?hào)、雙引號(hào)、注釋符、通配符、邏輯運(yùn)算符等。網(wǎng)站在搜索框中執(zhí)行以下SQL語(yǔ)句來(lái)查詢(xún)數(shù)據(jù)。攻擊者攻擊者可以在搜索框中輸入以下內(nèi)容。那么最終執(zhí)行的SQL語(yǔ)句將變成:這類(lèi)注入主要是在進(jìn)行數(shù)據(jù)搜索時(shí)沒(méi)過(guò)濾搜索參數(shù),一般在鏈接地址中有”keyword=關(guān)鍵字”,有的不顯示鏈接地址,而是通過(guò)搜索框表單提交。此類(lèi)注入點(diǎn)提交的SQL語(yǔ)句,其原型大致為:搜索框注入(搜索框注入)03SELECT*FROMproductsWHEREnameLIKE'%$_POST[search]%';'OR1=1--SELECT*FROMproductsWHERE

nameLIKE'%'

OR1=1--'%';

當(dāng)我們提交注入?yún)?shù)為keyword=’and[查詢(xún)條件]and‘%’=’,則想數(shù)據(jù)庫(kù)提交的SQL語(yǔ)句為:SELECT*form表名WHERE

字段LIKE'%關(guān)鍵字%'

SELECT*form表名WHERE

字段LIKE'%AND[查詢(xún)條件]AND'%'='%'查看博客系統(tǒng)源代碼文件apps/search.php源碼完整代碼見(jiàn)教材3.3.3apps/search.php搜索框注入(搜索框注入)03訪(fǎng)問(wèn)http://localhost/index.php?class=search在搜索框中輸入'and1=1--'%進(jìn)行搜索響應(yīng)頁(yè)面。搜索框注入(搜索框注入)03再在搜索框中輸入'and1=2--'%進(jìn)行搜索響應(yīng)頁(yè)面。分析兩次代碼的差異可以看出,我們所構(gòu)造的SQL語(yǔ)句是被數(shù)據(jù)庫(kù)當(dāng)做正常查詢(xún)語(yǔ)句執(zhí)行了,即搜索框中存在SQL注入漏洞。搜索框注入(搜索框注入)03SQL注入漏洞進(jìn)階04什么是SQL注入?SQL注入是一種常見(jiàn)的網(wǎng)絡(luò)攻擊技術(shù),攻擊者利用不正確的登陸認(rèn)證或者不安全的SQL語(yǔ)句來(lái)修改數(shù)據(jù)庫(kù)查詢(xún)的行為,從而獲取敏感信息或控制數(shù)據(jù)庫(kù)。SQL進(jìn)階技巧有:盲注漏洞、堆疊注入漏洞、二次注入漏洞。盲注漏洞盲注是SQL注入的一種高級(jí)技術(shù)。當(dāng)服務(wù)器端的應(yīng)用程序未返回有關(guān)注入的數(shù)據(jù)信息時(shí),就需要使用盲注技術(shù)來(lái)執(zhí)行SQL注入。盲注通常包括兩種類(lèi)型:基于布爾的盲注和基于時(shí)間的盲注?;诓紶柕拿ぷ⑹峭ㄟ^(guò)SQL語(yǔ)句的執(zhí)行結(jié)果(true或false)來(lái)確定是否存在漏洞,而基于時(shí)間的盲注是通過(guò)等待SQL語(yǔ)句的執(zhí)行結(jié)果來(lái)確定是否存在漏洞。例如,下面是一個(gè)簡(jiǎn)單的查詢(xún)語(yǔ)句。如果攻擊者使用

以下注入字符串:則SQL語(yǔ)句將變?yōu)椋篠QL注入漏洞進(jìn)階04SELECT*FROMusersWHEREusername='admin'

AND

password='password''OR1=1--SELECT*FROMusersWHEREusername=''

OR1=1--'ANDpassword='password'這個(gè)SQL語(yǔ)句的執(zhí)行結(jié)果將始終為真,因?yàn)镺R1=1總是為真。如果應(yīng)用程序的響應(yīng)不會(huì)泄漏有關(guān)查詢(xún)結(jié)果的信息,那么攻擊者可能需要使用基于時(shí)間的盲注來(lái)測(cè)試SQL語(yǔ)句的執(zhí)行時(shí)間,以確定是否存在漏洞。堆疊注入漏洞堆疊查詢(xún)是一種高級(jí)的SQL注入技術(shù),攻擊者可以利用它在一次請(qǐng)求中執(zhí)行多個(gè)查詢(xún)。例如,,考慮以下代碼。攻擊者可以構(gòu)造以下注入字符串:這個(gè)字符串將被解釋為兩個(gè)查詢(xún)SQL注入漏洞進(jìn)階04這將導(dǎo)致一個(gè)新用戶(hù)(hacker)被添加到用戶(hù)表中,而管理員(admin)的登錄將成功。SELECT*FROMusersWHEREusername='admin';INSERT

INTOusers(username,password)VALUES('hacker','password');--'ANDpassword='';

二次注入漏洞二次注入是一種SQL注入技術(shù),攻擊者在數(shù)據(jù)庫(kù)中創(chuàng)建惡意腳本,然后誘使另一個(gè)用戶(hù)(通常是管理員)執(zhí)行這些腳本。例如,考慮以下代碼。攻擊者可以構(gòu)造以下注入字符串:在進(jìn)階的SQL注入中,黑客不僅可以執(zhí)行SELECT語(yǔ)句,還可以執(zhí)行UPDATE、DELETE和INSERT等對(duì)數(shù)據(jù)進(jìn)行更改的語(yǔ)句;且能通過(guò)SQL語(yǔ)句的特點(diǎn)構(gòu)造出惡意代碼;以及利用一些數(shù)據(jù)庫(kù)的漏洞來(lái)進(jìn)行注入攻擊。SQL注入漏洞進(jìn)階04課堂實(shí)踐一、任務(wù)名稱(chēng):識(shí)別SQL注入點(diǎn)二、任務(wù)內(nèi)容:找出Web應(yīng)用程序中可能存在SQL注入的輸入點(diǎn)。三、工具需求:Burp、sqlmap四、任務(wù)要求:完成實(shí)踐練習(xí)后,由老師檢查完成情況。課堂思考一、SQL注入是如何工作的?二、如何通過(guò)分析數(shù)據(jù)庫(kù)和應(yīng)用程序日志來(lái)發(fā)現(xiàn)潛在的SQL注入嘗試?三、使用哪些工具或技術(shù)來(lái)驗(yàn)證SQL注入漏洞的有效性?四、SQL注入如何利用應(yīng)用程序的漏洞的?課后拓展:實(shí)戰(zhàn)演練SQL注入漏洞請(qǐng)同學(xué)們?yōu)g覽找出Web應(yīng)用程序中可能存在SQL注入的輸入點(diǎn)并通過(guò)SQL注入漏洞,嘗試提取數(shù)據(jù)庫(kù)中的用戶(hù)信息、管理員密碼、敏感業(yè)務(wù)數(shù)據(jù)等。THANK

YOUToBeContinuedWeb安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)參數(shù)化查詢(xún)繞過(guò)后臺(tái)登錄修復(fù)(字符型注入)文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)搜索框注入漏洞修復(fù)(搜索框注入)能夠修復(fù)系統(tǒng)中存在的漏洞。能夠?qū)σ研迯?fù)的漏洞進(jìn)行復(fù)測(cè)。任務(wù)四

SQL注入漏洞修復(fù)與規(guī)范項(xiàng)目三

安全的數(shù)據(jù)庫(kù)交換目錄CONTENTS01/參數(shù)化查詢(xún)02/繞過(guò)后臺(tái)登錄漏洞修復(fù)(字符型)03/文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)04/搜索框注入漏洞修復(fù)(搜索框注入)參數(shù)化查詢(xún)01什么是參數(shù)化查詢(xún)?參數(shù)化查詢(xún)是一種防止SQL注入攻擊的數(shù)據(jù)庫(kù)查詢(xún)方法。它通過(guò)將SQL查詢(xún)語(yǔ)句和查詢(xún)參數(shù)分離,以一種安全的方式傳遞用戶(hù)提供的輸入?yún)?shù),從而避免了SQL注入攻擊。參數(shù)化查詢(xún)的出現(xiàn)就是為了保證應(yīng)用程序安全和性能。在參數(shù)化查詢(xún)中,SQL查詢(xún)語(yǔ)句中的輸入?yún)?shù)是使用占位符來(lái)表示的。這些占位符會(huì)被傳遞給查詢(xún)處理器,然后再與查詢(xún)語(yǔ)句合并,生成一個(gè)完整的SQL查詢(xún)語(yǔ)句。在這個(gè)過(guò)程中,輸入?yún)?shù)的值會(huì)被安全地轉(zhuǎn)義,以避免SQL注入攻擊。參數(shù)化查詢(xún)的原理是使用預(yù)處理語(yǔ)句來(lái)處理查詢(xún)語(yǔ)句。參數(shù)化查詢(xún)可以大大降低應(yīng)用程序被SQL注入攻擊的風(fēng)險(xiǎn)。參數(shù)化查詢(xún)提高應(yīng)用程序的性能。參數(shù)化查詢(xún)不適用于動(dòng)態(tài)查詢(xún)語(yǔ)句和復(fù)雜查詢(xún)。參數(shù)化查詢(xún)的實(shí)現(xiàn)需要一些額外的編碼工作。參數(shù)化查詢(xún)的優(yōu)點(diǎn)參數(shù)化查詢(xún)的缺點(diǎn)參數(shù)化查詢(xún)01假設(shè)我們有一個(gè)用戶(hù)登錄的頁(yè)面,用戶(hù)需要輸入用戶(hù)名和密碼來(lái)登錄。我們使用PHP和MySQL來(lái)實(shí)現(xiàn)這個(gè)功能。完整代碼見(jiàn)教材3.4.1參數(shù)化查詢(xún)01我們使用了mysqli_prepare函數(shù)來(lái)準(zhǔn)備SQL查詢(xún)語(yǔ)句,并將需要傳遞給查詢(xún)語(yǔ)句的參數(shù)用問(wèn)號(hào)?替代。接著,使用mysqli_stmt_bind_param函數(shù)來(lái)綁定參數(shù),參數(shù)的類(lèi)型和值通過(guò)該函數(shù)的參數(shù)傳遞。最后,使用mysqli_stmt_execute函數(shù)執(zhí)行查詢(xún)語(yǔ)句并獲取結(jié)果集。這樣,就可以避免SQL注入攻擊。完整代碼見(jiàn)教材3.4.1參數(shù)化查詢(xún)01繞過(guò)后臺(tái)登錄修復(fù)(字符型注入)02博客程序源碼admin/check.php中代碼存在SQL注入漏洞,在該段代碼中存在SQL注入漏洞的地方是:其中,變量$username和$password是通過(guò)$_POST方式從前端獲取的,沒(méi)有經(jīng)過(guò)參數(shù)化處理。攻擊者可以通過(guò)構(gòu)造特定的輸入,比如在用戶(hù)名輸入框中輸入'or1=1--,使得SQL語(yǔ)句變?yōu)椋篠ELECT*FROMblog_adminWHEREusername=''

or1=1--'ANDpassword='e10adc3949ba59abbe56e057f20f883e'此時(shí),SQL語(yǔ)句將會(huì)查詢(xún)所有用戶(hù)名,并忽略密碼驗(yàn)證,攻擊者可以成功登錄系統(tǒng),甚至篡改數(shù)據(jù)庫(kù)。繞過(guò)后臺(tái)登錄修復(fù)(字符型注入)02修復(fù)SQL注入漏洞的方法是使用參數(shù)化查詢(xún),將SQL語(yǔ)句中的變量通過(guò)占位符的方式傳入,而不是通過(guò)字符串拼接的方式。使用mysqli_prepare()函數(shù)創(chuàng)建一個(gè)預(yù)處理語(yǔ)句$stmt然后使用mysqli_stmt_bind_param()函數(shù)綁定參數(shù),其中"ss"表示參數(shù)類(lèi)型都是字符串類(lèi)型。最后使用mysqli_stmt_execute()函數(shù)執(zhí)行預(yù)處理語(yǔ)句,并使用mysqli_stmt_get_result()函數(shù)獲取查詢(xún)結(jié)果。將請(qǐng)求轉(zhuǎn)發(fā)至重發(fā)器(Repeater),先不修改用戶(hù)名密碼測(cè)試是否能夠成功登錄。響應(yīng)結(jié)果。繞過(guò)后臺(tái)登錄修復(fù)(字符型注入)02=1111'or1=1--在Burp中打開(kāi)攔截請(qǐng)求,將攔截到的請(qǐng)求轉(zhuǎn)發(fā)至重發(fā)器,并構(gòu)造SQL注入語(yǔ)句,最后將發(fā)送請(qǐng)求并查看響應(yīng)。分析響應(yīng)可以看出同一個(gè)SQL注入已經(jīng)失效了,服務(wù)器響應(yīng)了`用戶(hù)名或密碼錯(cuò)誤。說(shuō)明構(gòu)造的SQL注入語(yǔ)句并未被數(shù)據(jù)庫(kù)執(zhí)行。文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03博客程序源碼apps/view.php中代碼存在SQL注入漏洞,在該段代碼中存在SQL注入漏洞的地方是:攻擊者可以通過(guò)在URL中添加SQL語(yǔ)句來(lái)修改原始查詢(xún),注入惡意SQL語(yǔ)句。針對(duì)這一問(wèn)題,可以采用以下兩種方案,完善博客程序源碼apps/view.php的代碼,修復(fù)存在SQL注入漏洞。http:///view.php?id=1;DELETEFROMblog_article;

文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)031)使用mysqli_prepare()函數(shù)創(chuàng)建預(yù)處理語(yǔ)句,將SQL查詢(xún)語(yǔ)句作為參數(shù)傳遞給它,例如:$stmt=mysqli_prepare($conn,"SELECT*FROMblog_articleWHEREid=?");2)使用mysqli_stmt_bind_param()函數(shù)將參數(shù)綁定到預(yù)處理語(yǔ)句中。第一個(gè)參數(shù)是預(yù)處理語(yǔ)句的句柄,第二個(gè)參數(shù)是參數(shù)類(lèi)型字符串,用于指定每個(gè)參數(shù)的類(lèi)型,例如i表示整數(shù)類(lèi)型,s表示字符串類(lèi)型等。第三個(gè)參數(shù)是實(shí)際的參數(shù)值,例如:mysqli_stmt_bind_param($stmt,"i",$_GET['id']);3)使用mysqli_stmt_execute()函數(shù)執(zhí)行預(yù)處理語(yǔ)句;4)使用mysqli_stmt_get_result()函數(shù)獲取查詢(xún)結(jié)果集。使用預(yù)處理語(yǔ)句和綁定參數(shù)是一種防止SQL注入攻擊的有效方法,因?yàn)樗鼤?huì)確保查詢(xún)參數(shù)被視為值而不是SQL代碼的一部分。預(yù)處理語(yǔ)句會(huì)先將SQL語(yǔ)句和參數(shù)分開(kāi)處理,再發(fā)送到MySQL服務(wù)器,從而有效地減少了SQL注入的風(fēng)險(xiǎn)。方案一:使用預(yù)處理語(yǔ)句和綁定參數(shù),將查詢(xún)語(yǔ)句和參數(shù)分離開(kāi)來(lái),從而避免使用用戶(hù)輸入來(lái)拼接SQL查詢(xún)語(yǔ)句,也避免了潛在的SQL注入攻擊。文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03首先使用了參數(shù)化查詢(xún)方式將$id參數(shù)傳遞給SQL語(yǔ)句。然后使用了prepare()方法準(zhǔn)備SQL語(yǔ)句,并使用bind_param()方法綁定參數(shù)值。最后使用execute()方法執(zhí)行SQL語(yǔ)句,將結(jié)果保存到$result3變量中。修改完成后再構(gòu)造如下SQL注入語(yǔ)句:方案二:使用參數(shù)化查詢(xún)的方式,將$id參數(shù)傳遞給SQL語(yǔ)句,而不是直接將其作為字符串拼接到SQL語(yǔ)句中。http://localhost/index.php?class=view&id=1%20and%201=1

文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03訪(fǎng)問(wèn)該URL響應(yīng)再次構(gòu)造如下SQL注入語(yǔ)句http://localhost/index.php?class=view&id=1%20and%201=2

文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03訪(fǎng)問(wèn)該URL響應(yīng)分析響應(yīng)可以看出同一個(gè)SQL注入已經(jīng)失效了,服務(wù)器在1=1和1=2都返回了相同響應(yīng)。說(shuō)明構(gòu)造的SQL注入語(yǔ)句并未被數(shù)據(jù)庫(kù)執(zhí)行。數(shù)字型注入是指攻擊者在輸入框中輸入的字符串被直接拼接到SQL語(yǔ)句中,例如在登錄時(shí),攻擊者輸入'or'1'='1,文章頁(yè)面注入(數(shù)字型注入)02攻擊者利用了SQL的邏輯運(yùn)算符或注釋符號(hào)(如--或/**/),將原本的SQL語(yǔ)句改變?yōu)樽约核谕恼Z(yǔ)句,從而繞過(guò)了應(yīng)用程序的驗(yàn)證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入是指攻擊者在輸入框中輸入的數(shù)字被直接拼接到SQL語(yǔ)句中,例如在文章搜索時(shí),攻擊者輸入1or1=1。SELECT*FROMusersWHEREusername=''

OR

'1'='1'

AND

password=''SELECT*FROMarticlesWHEREid=1OR1=1攻擊者利用了SQL的布爾邏輯運(yùn)算符,將原本的SQL語(yǔ)句改變?yōu)樽约核谕恼Z(yǔ)句,從而繞過(guò)了應(yīng)用程序的驗(yàn)證和控制,獲取了非授權(quán)的信息或操作權(quán)限。數(shù)字型注入通常發(fā)生在數(shù)字類(lèi)型的查詢(xún)參數(shù)上,例如整數(shù)和浮點(diǎn)數(shù)。例如,一個(gè)網(wǎng)站可能有一個(gè)頁(yè)面,該頁(yè)面的URL包含一個(gè)數(shù)字參數(shù),用于選擇要顯示的文章。攻擊者可以通過(guò)向URL中添加一個(gè)額外的數(shù)字參數(shù)并在其中嵌入SQL代碼,來(lái)嘗試注入惡意代碼。/article.php?id=1攻擊者可以通過(guò)在id參數(shù)中注入SQL代碼來(lái)獲取其他文章的內(nèi)容。/article.php?id=1;SELECT*FROMarticlesWHEREid=2$id來(lái)自于用戶(hù)通過(guò)id參數(shù)提交的值,并且未經(jīng)過(guò)過(guò)濾和轉(zhuǎn)義。完整代碼見(jiàn)教材3.3.2apps/view.php文章頁(yè)面注入(數(shù)字型注入)02訪(fǎng)問(wèn)http://localhost/index.php?class=view&id=1頁(yè)

面。文章頁(yè)面注入(數(shù)字型注入)02文章頁(yè)面注入(數(shù)字型注入)02嘗試SQL注入:http://localhost/index.php?class=view&id=1%20and%201=1,訪(fǎng)問(wèn)頁(yè)面發(fā)現(xiàn)響應(yīng)正常,說(shuō)明SQL語(yǔ)句成功執(zhí)行。再?lài)L試

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論