本文主要介紹了php防止sql注入的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
一、什么是SQL注入式攻擊?
? 所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動(dòng)態(tài)SQL命令,或作為存儲(chǔ)過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。常見的SQL注入式攻擊過程類如:
? ⑴ 某個(gè)ASP.NET Web應(yīng)用有一個(gè)登錄頁面,這個(gè)登錄頁面控制著用戶是否有權(quán)訪問應(yīng)用,它要求用戶輸入一個(gè)名稱和密碼。??
? ⑵ 登錄頁面中輸入的內(nèi)容將直接用來構(gòu)造動(dòng)態(tài)的SQL命令,或者直接用作存儲(chǔ)過程的參數(shù)。下面是ASP.NET應(yīng)用構(gòu)造查詢的一個(gè)例子:?
?System.Text.StringBuilder?query?=?new?System.Text.StringBuilder("SELECT?*?from?Users?WHERE?login?=?'")。Append(txtLogin.Text)。Append("'?AND?password='")。Append(txtPassword.Text)。Append("'");
? ⑶ 攻擊者在用戶名字和密碼輸入框中輸入"'或'1'='1"之類的內(nèi)容。
? ⑷ 用戶輸入的內(nèi)容提交給服務(wù)器之后,服務(wù)器運(yùn)行上面的ASP.NET代碼構(gòu)造出查詢用戶的SQL命令,但由于攻擊者輸入的內(nèi)容非常特殊,所以最后得到的SQL命令變成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'.
? ⑸ 服務(wù)器執(zhí)行查詢或存儲(chǔ)過程,將用戶輸入的身份信息和服務(wù)器中保存的身份信息進(jìn)行對(duì)比。
? ⑹ 由于SQL命令實(shí)際上已被注入式攻擊修改,已經(jīng)不能真正驗(yàn)證用戶身份,所以系統(tǒng)會(huì)錯(cuò)誤地授權(quán)給攻擊者。
? 如果攻擊者知道應(yīng)用會(huì)將表單中輸入的內(nèi)容直接用于驗(yàn)證身份的查詢,他就會(huì)嘗試輸入某些特殊的SQL字符串篡改查詢改變其原來的功能,欺騙系統(tǒng)授予訪問權(quán)限。
? 系統(tǒng)環(huán)境不同,攻擊者可能造成的損害也不同,這主要由應(yīng)用訪問數(shù)據(jù)庫的安全權(quán)限決定。如果用戶的帳戶具有管理員或其他比較高級(jí)的權(quán)限,攻擊者就可能對(duì)數(shù)據(jù)庫的表執(zhí)行各種他想要做的操作,包括添加、刪除或更新數(shù)據(jù),甚至可能直接刪除表。
二、如何防范?
? 好在要防止ASP.NET應(yīng)用被SQL注入式攻擊闖入并不是一件特別困難的事情,只要在利用表單輸入的內(nèi)容構(gòu)造SQL命令之前,把所有輸入內(nèi)容過濾一番就可以了。過濾輸入內(nèi)容可以按多種方式進(jìn)行。
?(1)對(duì)于動(dòng)態(tài)構(gòu)造SQL查詢的場(chǎng)合,可以使用下面的技術(shù):
? 第一:替換單引號(hào),即把所有單獨(dú)出現(xiàn)的單引號(hào)改成兩個(gè)單引號(hào),防止攻擊者修改SQL命令的含義。再來看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”顯然會(huì)得到與“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的結(jié)果。
? 第二:刪除用戶輸入內(nèi)容中的所有連字符,防止攻擊者構(gòu)造出類如“SELECT * from Users WHERE login = 'mas' —— AND password =''”之類的查詢,因?yàn)檫@類查詢的后半部分已經(jīng)被注釋掉,不再有效,攻擊者只要知道一個(gè)合法的用戶登錄名稱,根本不需要知道用戶的密碼就可以順利獲得訪問權(quán)限。
??第三:對(duì)于用來執(zhí)行查詢的數(shù)據(jù)庫帳戶,限制其權(quán)限。用不同的用戶帳戶執(zhí)行查詢、插入、更新、刪除操作。由于隔離了不同帳戶可執(zhí)行的操作,因而也就防止了原本用于執(zhí)行SELECT命令的地方卻被用于執(zhí)行INSERT、UPDATE或DELETE命令。
?(2)用存儲(chǔ)過程來執(zhí)行所有的查詢。SQL參數(shù)的傳遞方式將防止攻擊者利用單引號(hào)和連字符實(shí)施攻擊。此外,它還使得數(shù)據(jù)庫權(quán)限可以限制到只允許特定的存儲(chǔ)過程執(zhí)行,所有的用戶輸入必須遵從被調(diào)用的存儲(chǔ)過程的安全上下文,這樣就很難再發(fā)生注入式攻擊了。
?(3)限制表單或查詢字符串輸入的長(zhǎng)度。如果用戶的登錄名字最多只有10個(gè)字符,那么不要認(rèn)可表單中輸入的10個(gè)以上的字符,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。??
?(4)檢查用戶輸入的合法性,確信輸入的內(nèi)容只包含合法的數(shù)據(jù)。數(shù)據(jù)檢查應(yīng)當(dāng)在客戶端和服務(wù)器端都執(zhí)行——之所以要執(zhí)行服務(wù)器端驗(yàn)證,是為了彌補(bǔ)客戶端驗(yàn)證機(jī)制脆弱的安全性。??
? 在客戶端,攻擊者完全有可能獲得網(wǎng)頁的源代碼,修改驗(yàn)證合法性的腳本(或者直接刪除腳本),然后將非法內(nèi)容通過修改后的表單提交給服務(wù)器。因此,要保證驗(yàn)證操作確實(shí)已經(jīng)執(zhí)行,唯一的辦法就是在服務(wù)器端也執(zhí)行驗(yàn)證。你可以使用許多內(nèi)建的驗(yàn)證對(duì)象,例如RegularExpressionValidator,它們能夠自動(dòng)生成驗(yàn)證用的客戶端腳本,當(dāng)然你也可以插入服務(wù)器端的方法調(diào)用。如果找不到現(xiàn)成的驗(yàn)證對(duì)象,你可以通過CustomValidator自己創(chuàng)建一個(gè)。
?(5) 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這相當(dāng)于對(duì)用戶輸入的數(shù)據(jù)進(jìn)行了“消毒”處理,用戶輸入的數(shù)據(jù)不再對(duì)數(shù)據(jù)庫有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。System.Web.Security.FormsAuthentication類有一個(gè)HashPasswordForStoringInConfigFile,非常適合于對(duì)輸入數(shù)據(jù)進(jìn)行消毒處理。?
?(6) 檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量。如果程序只要求返回一個(gè)記錄,但實(shí)際返回的記錄卻超過一行,那就當(dāng)作出錯(cuò)處理。
?(7)使用預(yù)處理語句
更多php防止sql注入的方法詳解相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)