Web安全與防護(hù) (微課版) 課件 項(xiàng)目三 安全的數(shù)據(jù)庫(kù)交換_第1頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目三 安全的數(shù)據(jù)庫(kù)交換_第2頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目三 安全的數(shù)據(jù)庫(kù)交換_第3頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目三 安全的數(shù)據(jù)庫(kù)交換_第4頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目三 安全的數(shù)據(jù)庫(kù)交換_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目三

安全的數(shù)據(jù)庫(kù)交換Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)SQL的基本操作。動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法。能夠?qū)崿F(xiàn)數(shù)據(jù)庫(kù)的增刪查改。能夠使用PHP實(shí)現(xiàn)數(shù)據(jù)庫(kù)交互功能。任務(wù)一

登錄認(rèn)證功能實(shí)現(xiàn)目錄CONTENTS01/熟悉SQL的基本操作02/熟悉動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法SQL的基本操作01什么是數(shù)據(jù)庫(kù)?數(shù)據(jù)庫(kù)是指按照一定數(shù)據(jù)模型組織、存儲(chǔ)和管理數(shù)據(jù)的集合。常見(jiàn)的數(shù)據(jù)庫(kù)有關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、Oracle、SQLServer等)和非關(guān)系型數(shù)據(jù)庫(kù)(如MongoDB、Redis、Cassandra等)。關(guān)系型數(shù)據(jù)庫(kù)是目前應(yīng)用最廣泛的數(shù)據(jù)庫(kù)之一,其數(shù)據(jù)以表格的形式進(jìn)行組織和存儲(chǔ),由多個(gè)數(shù)據(jù)表之間的關(guān)系來(lái)表達(dá)數(shù)據(jù)間的聯(lián)系。SQL是關(guān)系型數(shù)據(jù)庫(kù)最常用的查詢語(yǔ)言,可用于對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增刪改查等操作。常用的SQL命令包括:SELECT:查詢數(shù)據(jù)、INSERT:插入數(shù)據(jù)、UPDATE:更新數(shù)據(jù)、DELETE:刪除數(shù)據(jù)SELECT:查詢數(shù)據(jù)的基本用法完整代碼見(jiàn)教材2.4.1INSERT:插入數(shù)據(jù)的基本用法SQL的基本操作01SELECTcolumn1,column2,...FROMtable_nameWHEREcondition;SELECT語(yǔ)句用于從一個(gè)或多個(gè)表格中選取數(shù)據(jù),并返回查詢結(jié)果。其中,column1,column2,

...表示需要查詢的列名,table_name表示要查詢的表格名稱

,condition表示查詢條件。SELECT*FROMusers;例如,查詢一個(gè)名為users的表格中的所有數(shù)據(jù):INSERT語(yǔ)句用于向一個(gè)表格中插入新數(shù)據(jù)。其中,table_name表示要插入數(shù)據(jù)的表格名稱,column1,column2,...表示需要插入數(shù)據(jù)的列名,value1,value2,...表示要插入的數(shù)據(jù)值。INSERT

INTOtable_name(column1,column2,...)VALUES(value1,value2,...);例如,向一個(gè)名為users的表格中插入一條新數(shù)據(jù),其username列的值為"Tom",password列的值為"123456"。INSERT

INTOusers(username,password)VALUES('Tom','123456');UPDATE:更新數(shù)據(jù)的基本用法完整代碼見(jiàn)教材2.4.1DELETE:刪除數(shù)據(jù)的基本用法SQL的基本操作01UPDATE語(yǔ)句用于更新一個(gè)或多個(gè)表格中的數(shù)據(jù)。其中,table_name表示要更新數(shù)據(jù)的表格名稱,column1=value1,column2=value2,...表示需要更新的列名和對(duì)應(yīng)的數(shù)據(jù)值,condition表示更新數(shù)據(jù)的條件。例如,將一個(gè)名為users的表格中,username為"Tom"的記錄的password更新為"654321"。INSERT語(yǔ)句用于向一個(gè)表格中插入新數(shù)據(jù)。其中,table_name表示要插入數(shù)據(jù)的表格名稱,column1,column2,...表示需要插入數(shù)據(jù)的列名,value1,value2,...表示要插入的數(shù)據(jù)值。例如,向一個(gè)名為users的表格中插入一條新數(shù)據(jù),其username列的值為"Tom",password列的值為"123456"。UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREcondition;UPDATEusersSET

password='654321'

WHEREusername='Tom';DELETE

FROMtable_nameWHEREcondition;DELETE

FROMusersWHEREusername='Tom';什么是動(dòng)態(tài)網(wǎng)頁(yè)?動(dòng)態(tài)頁(yè)面通常指的是網(wǎng)頁(yè)內(nèi)容不是靜態(tài)的,而是根據(jù)用戶請(qǐng)求、數(shù)據(jù)庫(kù)查詢結(jié)果或其他實(shí)時(shí)數(shù)據(jù)生成的。動(dòng)態(tài)頁(yè)面通過(guò)服務(wù)器端腳本、數(shù)據(jù)庫(kù)、模板引擎、框架、CMS、API和云服務(wù)等技術(shù)實(shí)現(xiàn),以提供個(gè)性化和交互性強(qiáng)的用戶體驗(yàn)。動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02Python提供了一個(gè)名為“sqlite3”的內(nèi)置模塊來(lái)連接和操作SQLite數(shù)據(jù)庫(kù)。此外,Python還有流行的庫(kù)它們提供了更高級(jí)別的抽象,使開(kāi)發(fā)人員可以更容易地與多種數(shù)據(jù)庫(kù)交互。PythonJava開(kāi)發(fā)人員通常使用JavaDatabaseConnectivity(JDBC)API來(lái)連接和操作數(shù)據(jù)庫(kù)。JDBC是Java平臺(tái)的標(biāo)準(zhǔn)API,提供了一組標(biāo)準(zhǔn)接口,用于連接到不同類型的數(shù)據(jù)庫(kù)。JavaC#開(kāi)發(fā)人員通常使用.NETFramework中的ADO.NET庫(kù)來(lái)連接和操作數(shù)據(jù)庫(kù)。ADO.NET提供了一組用于連接到不同類型數(shù)據(jù)庫(kù)的類和接口,開(kāi)發(fā)人員可以使用這些類和接口來(lái)執(zhí)行常見(jiàn)的數(shù)據(jù)庫(kù)操作。C#PHP開(kāi)發(fā)人員通常使用PHPDataObjects(PDO)擴(kuò)展庫(kù)來(lái)連接和操作數(shù)據(jù)庫(kù)。PDO提供了一個(gè)跨數(shù)據(jù)庫(kù)的抽象層,使開(kāi)發(fā)人員可以更輕松地在不同的數(shù)據(jù)庫(kù)之間切換,并且可以使用相同的API來(lái)執(zhí)行常見(jiàn)的數(shù)據(jù)庫(kù)操作。PHP動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02在Web應(yīng)用程序中,用戶身份的認(rèn)證是必不可少的。通常情況下,用戶的身份信息需要存儲(chǔ)在數(shù)據(jù)庫(kù)中。首先,我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表來(lái)存儲(chǔ)用戶的身份信息。為了保證密碼的安全性,通常將密碼加密后存儲(chǔ)在數(shù)據(jù)庫(kù)中。完整代碼見(jiàn)教材3.1.2動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02我們需要校驗(yàn)用戶提供的用戶名和密碼是否正確,可以從blog_admin表中查詢數(shù)據(jù)庫(kù)中記錄的用戶名和密碼與用戶提交的用戶名和密碼是否一致。SELECT*FROMblog_adminWHEREusername=?AND

password=?為了保證系統(tǒng)的安全性,我們需要對(duì)用戶輸入的敏感信息使用MD5算法進(jìn)行加密。接著,我們通過(guò)SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)中是否有對(duì)應(yīng)的記錄。如果存在,則說(shuō)明用戶輸入的用戶名和密碼是正確的;否則,就說(shuō)明輸入的用戶名或密碼有誤。完整代碼見(jiàn)教材3.1.2動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02當(dāng)用戶的登錄請(qǐng)求得到響應(yīng)時(shí),我們需要記錄用戶的登錄日志。我們記錄用戶登錄信息,包括IP地址、登錄時(shí)間和是否認(rèn)證失敗等字段。此外,我們還設(shè)置了限制IP地址在單位時(shí)間內(nèi)的認(rèn)證次數(shù),以防止惡意攻擊。如果在限制時(shí)間內(nèi)認(rèn)證失敗次數(shù)超過(guò)5次,則不允許用戶進(jìn)行認(rèn)證。完整代碼見(jiàn)教材3.1.2動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02通過(guò)以上步驟,我們就可以實(shí)現(xiàn)用戶的身份認(rèn)證,并保證了系統(tǒng)的安全性。為了實(shí)現(xiàn)博客文章的存儲(chǔ),我們需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)blog_article表,其中包含文章標(biāo)題、作者、發(fā)布時(shí)間、文章內(nèi)容、分類和文章ID等字段。完整代碼見(jiàn)教材3.1.3動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02在PHP中,我們可以使用mysqli_query函數(shù)來(lái)執(zhí)行SQL語(yǔ)句,包括查詢和修改操作。對(duì)于文章的顯示和編輯操作,我們需要根據(jù)文章的ID從blog_article表中查詢相應(yīng)的文章信息。完整代碼見(jiàn)教材3.1.3動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02對(duì)于評(píng)論的顯示和添加操作,我們需要根據(jù)文章的ID從blog_comment表中查詢相應(yīng)的評(píng)論信息以上是基本的文章存儲(chǔ)和顯示邏輯為了查詢文章,我們需要使用SQL的SELECT語(yǔ)句,并在WHERE子句中使用LIKE操作符來(lái)模糊匹配文章的標(biāo)題和分類。完整代碼見(jiàn)教材3.1.4動(dòng)態(tài)網(wǎng)頁(yè)的實(shí)現(xiàn)方法02在查詢文章之后,我們需要對(duì)查詢結(jié)果進(jìn)行分頁(yè)處理,以便在頁(yè)面上顯示多個(gè)搜索結(jié)果。我們可以使用PHP的$_GET變量來(lái)實(shí)現(xiàn)分頁(yè)以上我們就實(shí)現(xiàn)了網(wǎng)站的文章搜索功能。用戶可以輸入關(guān)鍵字搜索相關(guān)的文章,并在分頁(yè)中查看多個(gè)搜索結(jié)果。課堂實(shí)踐一、任務(wù)名稱:實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)功能二、任務(wù)內(nèi)容:編輯博客系統(tǒng)源碼實(shí)現(xiàn)博客文章的編輯和查詢。三、工具需求:PHP開(kāi)發(fā)工具四、任務(wù)要求:完成實(shí)踐練習(xí)后,由老師檢查完成情況。課堂思考一、如何選擇關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù)?什么情況下適合使用每種類型的數(shù)據(jù)庫(kù)?二、如何編寫高效的SQL查詢?三、如何平衡規(guī)范化和性能?四、如何使用索引來(lái)提高查詢性能?課后拓展:權(quán)限控制安全測(cè)試請(qǐng)同學(xué)們對(duì)我們的數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行測(cè)試,特別關(guān)注數(shù)據(jù)庫(kù)的權(quán)限管理和認(rèn)證。找出用戶權(quán)限控制機(jī)制和數(shù)據(jù)訪問(wèn)中存在的潛在問(wèn)題,并思考如何進(jìn)行改進(jìn)和解決。THANK

YOUToBeContinued項(xiàng)目三

安全的數(shù)據(jù)庫(kù)交換Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)SQL注入漏洞的概念。SQL注入漏洞的分類。SQL注入漏洞的危害。熟悉SQL注入漏洞的類型。掌握SQL注入漏洞的特點(diǎn)任務(wù)二

SQL注入漏洞分類的理解目錄CONTENTS01/SQL注入漏洞的概念02/SQL注入漏洞的分類03/SQL注入漏洞的危害SQL注入漏洞的概念01什么是SQL注入漏洞的概念?SQL是操作數(shù)據(jù)庫(kù)數(shù)據(jù)的結(jié)構(gòu)化查詢語(yǔ)言,網(wǎng)頁(yè)的應(yīng)用數(shù)據(jù)和后臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行交互時(shí)會(huì)采用SQL。而SQL注入是將Web頁(yè)面的原URL、表單域或數(shù)據(jù)包輸入的參數(shù),修改拼接成SQL語(yǔ)句,傳遞給Web服務(wù)器,進(jìn)而傳給數(shù)據(jù)庫(kù)服務(wù)器以執(zhí)行數(shù)據(jù)庫(kù)命令。如果Web應(yīng)用程序的開(kāi)發(fā)人員對(duì)用戶所輸入的數(shù)據(jù)或cookie等內(nèi)容不進(jìn)行過(guò)濾或驗(yàn)證(即存在注入點(diǎn))就直接傳輸給數(shù)據(jù)庫(kù),就可能導(dǎo)致拼接的SQL被執(zhí)行,獲取對(duì)數(shù)據(jù)庫(kù)的信息以及提權(quán),發(fā)生SQL注入攻擊。SQL注入漏洞的概念01另外,在網(wǎng)站開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員使用動(dòng)態(tài)字符串構(gòu)造SQL語(yǔ)句,用來(lái)創(chuàng)建所需的應(yīng)用,這種情況下SQL語(yǔ)句在程序的執(zhí)行過(guò)程中被動(dòng)態(tài)的構(gòu)造使用,可以根據(jù)不同的條件產(chǎn)生不同的SQL語(yǔ)句.通過(guò)把惡意的SQL命令插入到Web表單中提交、輸入域名或頁(yè)面請(qǐng)求的查詢字符串中,注入到后臺(tái)數(shù)據(jù)庫(kù)引擎,欺騙服務(wù)器執(zhí)行惡意的SQL命令SQL注入漏洞沒(méi)有對(duì)輸入的數(shù)據(jù)進(jìn)行過(guò)濾(過(guò)濾輸入);沒(méi)有對(duì)發(fā)送到數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行轉(zhuǎn)義(轉(zhuǎn)義輸出)。原因SQL注入漏洞的概念01SQL注入漏洞的分類02字符串類型的注入注入點(diǎn)數(shù)據(jù)類型數(shù)字類型的注入、字符串類型的注入、搜索型注入數(shù)據(jù)提交方式GET注入、POST注入、COOKIE注入、HTTP頭注入獲取信息方式基于布爾的盲注、基于時(shí)間的盲注、基于報(bào)錯(cuò)的注入、聯(lián)合查詢注入、堆查詢注入SQL注入漏洞的危害031數(shù)據(jù)庫(kù)信息泄漏數(shù)據(jù)庫(kù)中存放的用戶的隱私信息的泄露。2網(wǎng)頁(yè)篡改通過(guò)操作數(shù)據(jù)庫(kù)對(duì)特定網(wǎng)頁(yè)進(jìn)行篡改。3網(wǎng)站傳播惡意軟件修改數(shù)據(jù)庫(kù)一些字段的值,嵌入網(wǎng)馬鏈接,進(jìn)行掛馬攻擊。4數(shù)據(jù)庫(kù)被惡意操作數(shù)據(jù)庫(kù)服務(wù)器被攻擊,數(shù)據(jù)庫(kù)的系統(tǒng)管理員帳戶被竄改。5服務(wù)器被遠(yuǎn)程控制被安裝后門,經(jīng)由數(shù)據(jù)庫(kù)服務(wù)器提供的操作系統(tǒng)支持,讓黑客得以修改或控制操作系統(tǒng)。6破壞硬盤數(shù)據(jù)癱瘓全系統(tǒng)。課堂實(shí)踐一、任務(wù)名稱:探索SQL注入基礎(chǔ)知識(shí)二、任務(wù)內(nèi)容:通過(guò)模擬SQL注入攻擊,理解SQL注入的原理、類型、危害,并學(xué)習(xí)基本的防御措施。三、工具需求:Burp、數(shù)據(jù)庫(kù)管理工具四、任務(wù)要求:完成實(shí)踐練習(xí)后,由老師檢查完成情況。課堂思考一、SQL注入是如何工作的?有哪些常見(jiàn)的注入點(diǎn)?二、有哪些不同類型的SQL注入?三、為什么開(kāi)發(fā)者需要關(guān)注并理解SQL注入?四、有哪些有效的防御SQL注入的策略?課后拓展:安全事件SQL注入攻擊請(qǐng)同學(xué)們通過(guò)互聯(lián)網(wǎng)查找近5年內(nèi)與SQL注入攻擊的網(wǎng)絡(luò)安全事件,分析導(dǎo)致相關(guān)安全事件發(fā)生的原因,提交word文檔或PPT,下節(jié)課會(huì)抽點(diǎn)部分同學(xué)上來(lái)給大家分享一下自己了解到SQL注入攻擊的安全事件案例。THANK

YOUToBeContinuedWeb安全與防護(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ò)修改登錄表單中的用戶名和密碼的輸入值,構(gòu)造出惡意的SQL語(yǔ)句來(lái)實(shí)現(xiàn)繞過(guò)登錄的目的。通過(guò)修改登錄表單的輸入值來(lái)實(shí)現(xiàn)繞過(guò)登錄。完整代碼見(jiàn)教材3.3.1攻擊者可以在登錄表單中輸入類似于'or1=1--的字符串繞過(guò)后臺(tái)登錄(字符型注入)01SELECT*FROMusersWHEREusername=''

or1=1--'ANDpassword=''由于or1=1始終為真,攻擊者將繞過(guò)用戶名和密碼的驗(yàn)證,并成功登錄到后臺(tái)。查看博客系統(tǒng)源碼admin/check.php文件。這段代碼的SQL注入漏洞在于用戶登錄驗(yàn)證的SQL查詢中。由于用戶輸入的用戶名和密碼沒(méi)有經(jīng)過(guò)充分的驗(yàn)證和過(guò)濾,直接拼接到SQL語(yǔ)句中,導(dǎo)致攻擊者可以在輸入的用戶名或密碼中注入惡意SQL代碼,改變SQL查詢語(yǔ)句的執(zhí)行邏輯。完整代碼見(jiàn)教材3.3.1繞過(guò)后臺(tái)登錄(字符型注入)01admin/check.php如果黑客在用戶名輸入框中輸入admin'--,密碼輸入框中輸入任意密碼。那么會(huì)因?yàn)?-表示注釋掉后面的SQL代碼,因此上面的查詢語(yǔ)句實(shí)際上只驗(yàn)證了用戶名為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。在用戶名輸入框面輸入任意用戶名,密碼框中輸入任意密碼。啟動(dòng)Burp在Intruder中開(kāi)啟截?cái)?。在登錄?yè)面中點(diǎn)擊提交,Burp中攔截到請(qǐng)求將請(qǐng)求轉(zhuǎn)發(fā)至重發(fā)器(Repeater),先不修改用戶名密碼測(cè)試是否能夠成功登錄。響應(yīng)結(jié)果。繞過(guò)后臺(tái)登錄(字符型注入)01可以看到服務(wù)器響應(yīng)了‘用戶名或密碼錯(cuò)誤’,修改用戶名為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ù)字類型的查詢參數(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)自于用戶通過(guò)id參數(shù)提交的值,并且未經(jīng)過(guò)過(guò)濾和轉(zhuǎn)義。完整代碼見(jiàn)教材3.3.2apps/view.php文章頁(yè)面注入(數(shù)字型注入)02訪問(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,訪問(wèn)頁(yè)面發(fā)現(xiàn)響應(yīng)正常,說(shuō)明SQL語(yǔ)句成功執(zhí)行。再嘗試訪問(wèn)http://localhost/index.php?class=view&id=1%20and%201=2,使查詢條件不成立查看響應(yīng)為異常頁(yè)面說(shuō)明該處存在注入點(diǎn)。文章頁(yè)面注入(數(shù)字型注入)02搜索框注入(搜索框注入)03什么是搜索框注入(搜索框注入)?搜索框注入是一種常見(jiàn)的SQL注入類型,攻擊者通過(guò)在網(wǎng)站的搜索框中輸入惡意的搜索參數(shù),從而修改SQL查詢語(yǔ)句,獲取未經(jīng)授權(quán)的信息。搜索框注入屬于字符型注入,和前面的數(shù)字型注入有所不同。搜索框注入的原理與字符型注入類似,攻擊者通過(guò)在搜索框中輸入特定的字符,改變SQL語(yǔ)句的執(zhí)行,達(dá)到繞過(guò)用戶驗(yàn)證或者篡改數(shù)據(jù)的目的。常見(jiàn)的攻擊方式包括:?jiǎn)我?hào)、雙引號(hào)、注釋符、通配符、邏輯運(yùn)算符等。網(wǎng)站在搜索框中執(zhí)行以下SQL語(yǔ)句來(lái)查詢數(shù)據(jù)。攻擊者攻擊者可以在搜索框中輸入以下內(nèi)容。那么最終執(zhí)行的SQL語(yǔ)句將變成:這類注入主要是在進(jìn)行數(shù)據(jù)搜索時(shí)沒(méi)過(guò)濾搜索參數(shù),一般在鏈接地址中有”keyword=關(guān)鍵字”,有的不顯示鏈接地址,而是通過(guò)搜索框表單提交。此類注入點(diǎn)提交的SQL語(yǔ)句,其原型大致為:搜索框注入(搜索框注入)03SELECT*FROMproductsWHEREnameLIKE'%$_POST[search]%';'OR1=1--SELECT*FROMproductsWHERE

nameLIKE'%'

OR1=1--'%';

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

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

SELECT*form表名WHERE

字段LIKE'%AND[查詢條件]AND'%'='%'查看博客系統(tǒng)源代碼文件apps/search.php源碼完整代碼見(jiàn)教材3.3.3apps/search.php搜索框注入(搜索框注入)03訪問(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)做正常查詢語(yǔ)句執(zhí)行了,即搜索框中存在SQL注入漏洞。搜索框注入(搜索框注入)03SQL注入漏洞進(jìn)階04什么是SQL注入?SQL注入是一種常見(jiàn)的網(wǎng)絡(luò)攻擊技術(shù),攻擊者利用不正確的登陸認(rèn)證或者不安全的SQL語(yǔ)句來(lái)修改數(shù)據(jù)庫(kù)查詢的行為,從而獲取敏感信息或控制數(shù)據(jù)庫(kù)。SQL進(jìn)階技巧有:盲注漏洞、堆疊注入漏洞、二次注入漏洞。盲注漏洞盲注是SQL注入的一種高級(jí)技術(shù)。當(dāng)服務(wù)器端的應(yīng)用程序未返回有關(guān)注入的數(shù)據(jù)信息時(shí),就需要使用盲注技術(shù)來(lái)執(zhí)行SQL注入。盲注通常包括兩種類型:基于布爾的盲注和基于時(shí)間的盲注?;诓紶柕拿ぷ⑹峭ㄟ^(guò)SQL語(yǔ)句的執(zhí)行結(jié)果(true或false)來(lái)確定是否存在漏洞,而基于時(shí)間的盲注是通過(guò)等待SQL語(yǔ)句的執(zhí)行結(jié)果來(lái)確定是否存在漏洞。例如,下面是一個(gè)簡(jiǎ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)查詢結(jié)果的信息,那么攻擊者可能需要使用基于時(shí)間的盲注來(lái)測(cè)試SQL語(yǔ)句的執(zhí)行時(shí)間,以確定是否存在漏洞。堆疊注入漏洞堆疊查詢是一種高級(jí)的SQL注入技術(shù),攻擊者可以利用它在一次請(qǐng)求中執(zhí)行多個(gè)查詢。例如,,考慮以下代碼。攻擊者可以構(gòu)造以下注入字符串:這個(gè)字符串將被解釋為兩個(gè)查詢SQL注入漏洞進(jìn)階04這將導(dǎo)致一個(gè)新用戶(hacker)被添加到用戶表中,而管理員(admin)的登錄將成功。SELECT*FROMusersWHEREusername='admin';INSERT

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

二次注入漏洞二次注入是一種SQL注入技術(shù),攻擊者在數(shù)據(jù)庫(kù)中創(chuàng)建惡意腳本,然后誘使另一個(gè)用戶(通常是管理員)執(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ù)名稱:識(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ù)中的用戶信息、管理員密碼、敏感業(yè)務(wù)數(shù)據(jù)等。THANK

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

or1=1--'ANDpassword='e10adc3949ba59abbe56e057f20f883e'此時(shí),SQL語(yǔ)句將會(huì)查詢所有用戶名,并忽略密碼驗(yàn)證,攻擊者可以成功登錄系統(tǒng),甚至篡改數(shù)據(jù)庫(kù)。繞過(guò)后臺(tái)登錄修復(fù)(字符型注入)02修復(fù)SQL注入漏洞的方法是使用參數(shù)化查詢,將SQL語(yǔ)句中的變量通過(guò)占位符的方式傳入,而不是通過(guò)字符串拼接的方式。使用mysqli_prepare()函數(shù)創(chuàng)建一個(gè)預(yù)處理語(yǔ)句$stmt然后使用mysqli_stmt_bind_param()函數(shù)綁定參數(shù),其中"ss"表示參數(shù)類型都是字符串類型。最后使用mysqli_stmt_execute()函數(shù)執(zhí)行預(yù)處理語(yǔ)句,并使用mysqli_stmt_get_result()函數(shù)獲取查詢結(jié)果。將請(qǐng)求轉(zhuǎn)發(fā)至重發(fā)器(Repeater),先不修改用戶名密碼測(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)了`用戶名或密碼錯(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)修改原始查詢,注入惡意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查詢語(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ù)類型字符串,用于指定每個(gè)參數(shù)的類型,例如i表示整數(shù)類型,s表示字符串類型等。第三個(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ù)獲取查詢結(jié)果集。使用預(yù)處理語(yǔ)句和綁定參數(shù)是一種防止SQL注入攻擊的有效方法,因?yàn)樗鼤?huì)確保查詢參數(shù)被視為值而不是SQL代碼的一部分。預(yù)處理語(yǔ)句會(huì)先將SQL語(yǔ)句和參數(shù)分開(kāi)處理,再發(fā)送到MySQL服務(wù)器,從而有效地減少了SQL注入的風(fēng)險(xiǎn)。方案一:使用預(yù)處理語(yǔ)句和綁定參數(shù),將查詢語(yǔ)句和參數(shù)分離開(kāi)來(lái),從而避免使用用戶輸入來(lái)拼接SQL查詢語(yǔ)句,也避免了潛在的SQL注入攻擊。文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03首先使用了參數(shù)化查詢方式將$id參數(shù)傳遞給SQL語(yǔ)句。然后使用了prepare()方法準(zhǔn)備SQL語(yǔ)句,并使用bind_param()方法綁定參數(shù)值。最后使用execute()方法執(zhí)行SQL語(yǔ)句,將結(jié)果保存到$result3變量中。修改完成后再構(gòu)造如下SQL注入語(yǔ)句:方案二:使用參數(shù)化查詢的方式,將$id參數(shù)傳遞給SQL語(yǔ)句,而不是直接將其作為字符串拼接到SQL語(yǔ)句中。http://localhost/index.php?class=view&id=1%20and%201=1

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

文章頁(yè)面注入漏洞修復(fù)(數(shù)字型注入)03訪問(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ǔ)句,從而繞

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論