一区二区三区中文国产亚洲_另类视频区第一页_日韩精品免费视频_女人免费视频_国产综合精品久久亚洲

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  應(yīng)聘面試  >  網(wǎng)絡(luò)安全面試題  > PHP安全:SQL注入漏洞

PHP安全:SQL注入漏洞

來(lái)源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2022-10-28 10:45:00 1666925100

  本文介紹由于PHP的不安全編碼引起的各類SQL注入。經(jīng)常看到網(wǎng)站被拖庫(kù),造成信息泄露,主要就是SQL注入漏洞造成的。

  1、什么是SQL注入

  SQL注入漏洞為PHP研發(fā)人員所熟知,它是所有漏洞類型中危害最嚴(yán)重的漏洞之一。SQL注入漏洞,主要是通過(guò)偽造客戶端請(qǐng)求,把SQL命令提交到服務(wù)端進(jìn)行非法請(qǐng)求的操作,最終達(dá)到欺騙服務(wù)器從而執(zhí)行惡意的SQL命令。

  研發(fā)人員在處理應(yīng)用程序和數(shù)據(jù)庫(kù)交互時(shí),未對(duì)用戶可控參數(shù)進(jìn)行嚴(yán)格的校驗(yàn)防范,例如使用字符串拼接的方式構(gòu)造SQL語(yǔ)句在數(shù)據(jù)庫(kù)中進(jìn)行執(zhí)行,很容易埋下安全隱患。

  SQL注入可以造成數(shù)據(jù)庫(kù)信息泄露,特別是數(shù)據(jù)庫(kù)中存放的用戶隱私信息的泄露。通過(guò)操作數(shù)據(jù)庫(kù)對(duì)特定網(wǎng)頁(yè)進(jìn)行篡改,修改數(shù)據(jù)庫(kù)一些字段的值,嵌入惡意鏈接,進(jìn)行掛馬攻擊,傳播惡意軟件。服務(wù)器還容易被遠(yuǎn)程控制,被安裝后門,經(jīng)由數(shù)據(jù)庫(kù)服務(wù)器提供的操作系統(tǒng)支持,讓攻擊者得以修改或控制操作系統(tǒng)以及破壞硬盤數(shù)據(jù),癱瘓全系統(tǒng)。

  目前常見的SQL注入的攻擊方式有報(bào)錯(cuò)注入、普通注入、隱式類型注入、盲注、寬字節(jié)注入、二次解碼注入。下面對(duì)每一種注入威脅舉例說(shuō)明,以幫助您在編碼過(guò)程中有效地避免漏洞的產(chǎn)生。

  為了能更直觀地了解SQL注入,先在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名叫hacker的用戶表。下面是數(shù)據(jù)表的結(jié)構(gòu),示例都是通過(guò)這個(gè)表結(jié)構(gòu)來(lái)說(shuō)明的。

PHP安全:SQL注入漏洞1

  下面的一段PHP代碼,主要功能是在數(shù)據(jù)庫(kù)中通過(guò)用戶名查詢用戶的具體信息。通過(guò)這段代碼,來(lái)介紹SQL注入以及它對(duì)系統(tǒng)的危害。

PHP安全:SQL注入漏洞2

  2、報(bào)錯(cuò)注入

  報(bào)錯(cuò)注入是指惡意攻擊者用特殊的方式使數(shù)據(jù)庫(kù)發(fā)生錯(cuò)誤并產(chǎn)生報(bào)錯(cuò)信息,從而獲得數(shù)據(jù)庫(kù)和系統(tǒng)信息,方便攻擊者進(jìn)行下一步攻擊。

  需要注意,在研發(fā)過(guò)程中,如果傳入查詢參數(shù)且沒(méi)有對(duì)參數(shù)進(jìn)行嚴(yán)格處理,通常會(huì)造成SQL報(bào)錯(cuò)注入。

PHP安全:SQL注入漏洞3

  如果對(duì)$username傳入?yún)?shù)hacker'attack,完整請(qǐng)求http://localhost:8080/mysql.php?name=hacker'attack,查詢語(yǔ)句將變成以下形式。PHP安全:SQL注入漏洞4

  這可以導(dǎo)致數(shù)據(jù)庫(kù)報(bào)錯(cuò),攻擊者就可以通過(guò)這種方式獲取MySQL的各類信息,從而對(duì)系統(tǒng)進(jìn)行下一步的攻擊和破壞。

  為了防止報(bào)錯(cuò)信息被攻擊者直接看到,網(wǎng)站上線后需要設(shè)置display_errors=Off。

  3、普通注入

  下面的示例是普通注入。攻擊者在地址欄輸入下面帶有部分SQL語(yǔ)句的請(qǐng)求。

PHP安全:SQL注入漏洞5

  最終的SQL語(yǔ)句變成如下形式。PHP安全:SQL注入漏洞6

  從而輸入任何參數(shù)都可以滿足查詢條件,使其變成一個(gè)萬(wàn)能查詢語(yǔ)句。同樣,可以使用UNION和多語(yǔ)句進(jìn)行查詢,獲取數(shù)據(jù)庫(kù)的全部信息。

  完整請(qǐng)求URL:

PHP安全:SQL注入漏洞7

  數(shù)據(jù)庫(kù)當(dāng)前表中的數(shù)據(jù)將被全部備份在/tmp/backup.sql文件中。當(dāng)攻擊者再利用其他漏洞找到下載方式,將文件下載或者復(fù)制走,最終造成被拖庫(kù)時(shí),Web站點(diǎn)的數(shù)據(jù)就會(huì)全部暴露。

  如果執(zhí)行下面請(qǐng)求,將發(fā)生更可怕的事情。PHP安全:SQL注入漏洞8

  執(zhí)行上面的請(qǐng)求后,在原有的SQL語(yǔ)句后面拼接了name';DELETE FROM hacker;SELECT * FROM username WHERE 'a'='a,查詢語(yǔ)句變成了以下形式。

PHP安全:SQL注入漏洞9

  數(shù)據(jù)庫(kù)里的數(shù)據(jù)被攻擊者完全刪除。如果沒(méi)有提前對(duì)數(shù)據(jù)進(jìn)行備份,這對(duì)于系統(tǒng)造成的傷害將是毀滅性的。

  4、隱式類型注入

  以數(shù)據(jù)表結(jié)構(gòu)為例,編寫以下查詢語(yǔ)句。

PHP安全:SQL注入漏洞10

  該查詢語(yǔ)句的作用是通過(guò)email查詢相應(yīng)的用戶信息,由于將email的值誤寫為0,在圖1的執(zhí)行結(jié)果中可以看到數(shù)據(jù)庫(kù)返回了表中的所有內(nèi)容。

  為什么會(huì)這樣呢?因?yàn)樵贛ySQL中執(zhí)行SQL查詢時(shí),如果SQL語(yǔ)句中字段的數(shù)據(jù)類型和對(duì)應(yīng)表中字段的數(shù)據(jù)類型不一致,MySQL查詢優(yōu)化器會(huì)將數(shù)據(jù)的類型進(jìn)行隱式轉(zhuǎn)換。表1中列出了SQL執(zhí)行過(guò)程中MySQL變量類型轉(zhuǎn)換規(guī)則,在研發(fā)過(guò)程中需要注意它的影響。

  通過(guò)表中的轉(zhuǎn)換關(guān)系可以看出,在上面的查詢語(yǔ)句中,MySQL將數(shù)據(jù)類型轉(zhuǎn)換為DOUBLE后進(jìn)行查詢,由于STRING轉(zhuǎn)換后的值為0,同時(shí)查詢條件中的值也為0,所以匹配到了整張表的內(nèi)容。

  5、盲注

  報(bào)錯(cuò)注入和普通注入顯而易見,盲注有時(shí)容易被忽略。

  在頁(yè)面無(wú)返回的情況下,攻擊者也可以通過(guò)延時(shí)等技術(shù)實(shí)現(xiàn)發(fā)現(xiàn)和利用注入漏洞。

PHP安全:SQL注入漏洞11

  判斷數(shù)據(jù)庫(kù)版本,執(zhí)行成功,瀏覽器返回會(huì)延時(shí)并利用BENCHMARK()函數(shù)進(jìn)行延時(shí)注入。PHP安全:SQL注入漏洞12

  該請(qǐng)求會(huì)使MySQL的查詢睡眠5秒,攻擊者可以通過(guò)添加判斷條件到SQL語(yǔ)句中,如果睡眠了5秒,那么說(shuō)明MySQL版本為5,否則不是。通過(guò)盲注可以掌握數(shù)據(jù)庫(kù)和服務(wù)器的相關(guān)信息,為攻擊提供便利。

  6、寬字節(jié)注入

  要觸發(fā)寬字節(jié)注入,有一個(gè)前提條件,即數(shù)據(jù)庫(kù)和程序編碼都是GBK的。下面的示例代碼以GBK編碼格式保存。

PHP安全:SQL注入漏洞13

  在這個(gè)SQL語(yǔ)句前面,使用了一個(gè)addslashes()函數(shù),將$id的值進(jìn)行轉(zhuǎn)義處理。只要輸入?yún)?shù)中有單引號(hào),就逃逸不出限制,無(wú)法進(jìn)行SQL注入,具體如下。

PHP安全:SQL注入漏洞14

  上面兩個(gè)請(qǐng)求都通過(guò)了addslashes,不會(huì)引起SQL注入。要實(shí)現(xiàn)注入就要逃過(guò)addslashes的限制,addslashes()函數(shù)的作用是讓“'”變成”'”,進(jìn)行了轉(zhuǎn)義。攻擊者一般的繞過(guò)方式就是想辦法處理“'”前面的“\”。

  PHP在使用GBK編碼的時(shí)候,會(huì)認(rèn)為兩個(gè)字符是一個(gè)漢字。當(dāng)輸入的第一個(gè)字符的ASCII碼大于128時(shí),看看會(huì)發(fā)生什么情況,例如輸入“%81'”。

  MySQL報(bào)告出現(xiàn)語(yǔ)法SQL錯(cuò)誤,原因是多輸入了一個(gè)引號(hào),然而前面的反斜杠不見了,一旦出現(xiàn)數(shù)據(jù)庫(kù)報(bào)錯(cuò),就說(shuō)明可以進(jìn)行SQL注入了。

  原因是GBK是多字節(jié)編碼,PHP認(rèn)為兩個(gè)字節(jié)代表一個(gè)漢字,所以%81和后面的反斜杠%5c變成了一個(gè)漢字“乗”,造成反斜杠消失。

  7、二次解碼注入

  通常情況下,為了防止SQL注入的發(fā)生,采取轉(zhuǎn)義特殊字符,例如對(duì)用戶輸入的單引號(hào)(')、雙引號(hào)(")進(jìn)行轉(zhuǎn)義變成“'"”。有一個(gè)誤區(qū)就是通過(guò)配置PHP的GPC開關(guān)進(jìn)行自動(dòng)轉(zhuǎn)義。

  當(dāng)攻擊者將參數(shù)二次編碼時(shí),PHP的自動(dòng)轉(zhuǎn)義將無(wú)法識(shí)別用戶的惡意輸入。

  用前面的URL,來(lái)構(gòu)造如下新的請(qǐng)求。

PHP安全:SQL注入漏洞15

  當(dāng)PHP接收到請(qǐng)求時(shí)會(huì)自動(dòng)進(jìn)行一次URL解碼,變?yōu)閚ame%27,然后代碼里又使用urldecode()函數(shù)或rawurldecode()函數(shù)進(jìn)行解碼,%27變成了單引號(hào),URL最終變成name=name'引發(fā)SQL注入。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
網(wǎng)絡(luò)安全面試題及答案

1.什么是網(wǎng)絡(luò)安全?為什么網(wǎng)絡(luò)安全重要?答:網(wǎng)絡(luò)安全是保護(hù)計(jì)算機(jī)網(wǎng)絡(luò)和網(wǎng)絡(luò)連接的機(jī)制和措施,防止未經(jīng)授權(quán)的訪問(wèn)、攻擊和損害。網(wǎng)絡(luò)安全對(duì)于保...詳情>>

2023-07-20 15:29:47
什么是防火墻?

我們知道,原是指古代人們房屋之間修建的那道墻,這道墻可以防止火災(zāi)發(fā)生的時(shí)候蔓延到別的房屋?!《@里所說(shuō)的防火墻當(dāng)然不是指物理上的防火墻...詳情>>

2022-10-28 09:50:00
常見6種WAF繞過(guò)和防護(hù)原理

今天就聊聊關(guān)于上傳繞過(guò)WAF的姿勢(shì),WAF(Web Application Firewall)簡(jiǎn)單的來(lái)說(shuō)就是執(zhí)行一系列針對(duì)HTTP/HTTPS的安全策略來(lái)專門為Web應(yīng)用提供保護(hù)...詳情>>

2022-10-28 09:37:00
網(wǎng)絡(luò)安全方面的崗位面試題目集合(二)

單針對(duì)金融業(yè)務(wù)的 主要是數(shù)據(jù)的篡改(涉及金融數(shù)據(jù),或部分業(yè)務(wù)的判斷數(shù)據(jù)),由競(jìng)爭(zhēng)條件或者設(shè)計(jì)不當(dāng)引起的薅羊毛,交易/訂單信息泄露,水平越權(quán)...詳情>>

2022-07-21 17:50:00
【SQL篇】大廠網(wǎng)絡(luò)安全面試題集合(一)

SQL 注入防護(hù)1、使用安全的 API2、對(duì)輸入的特殊字符進(jìn)行 Escape 轉(zhuǎn)義處理3、使用白名單來(lái)規(guī)范化輸入驗(yàn)證方法 4、對(duì)客戶端輸入進(jìn)行控制,不允許...詳情>>

2022-07-14 13:44:00