防止sql注入攻擊的方法總結

2021-09-19 18:43:22 字數 2380 閱讀 8638

sql注入是一種利用未過濾/未審核使用者輸入的攻擊方法(「快取溢位」和這個不同),意思就是讓應用執行本不應該執行的sql**。通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,就會造成一些出人意料的結果,最終達到欺騙伺服器執行惡意的sql命令。

sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過sql語句,實現無帳號登入,甚至篡改資料庫。

二、sql注入攻擊的總體思路

1.尋找到sql注入的位置

2.判斷伺服器型別和後台資料庫型別

3.針對不通的伺服器和資料庫特點進行sql注入攻擊

三、防止sql注入攻擊的方法總結

一、引數化sql

是指在設計與資料庫鏈結並訪問資料時,在需要填入數值或資料的地方,使用引數 (parameter) 來給值,用@來表示引數。

在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為sql指令的一部份來處理,而是在資料庫完成 sql 指令的編譯後,才套用引數執行,因此就算引數中含有惡意的指令,由於已經編譯完成,就不會被資料庫所執行,因此,可從一定程度上避免sql注入。(注意:只是一定程度上避免,仍有例外)

在不用的資料庫上基本語法都是一樣的,但在不同的執行平台上客戶端的書寫有不同之處,舉例使用sql server在.net上執行。

sqlcommand sqlcmd = new sqlcommand("insert into mytable (c1, c2, c3, c4) values (@c1, @c2)", sqlconn);

sqlcmd.parameters.addwithvalue("@c1", 1); ' 設定引數 @c1 的值。

sqlcmd.parameters.addwithvalue("@c2", 2); ' 設定引數 @c2 的值。

sqlconn.open();

sqlcmd.executenonquery();

sqlconn.close();

注意:

1、如果儲存過程中使用字串拼接sql的話,上面的引數化將不會起作用,單引號必須經過判斷並替換,在資料庫中,用2個單引號代表1個實際的單引號。所以,如果是拼接sql字串的方式,需要用replace(@para,'''', '''''')來替換一下,將1個單引號替換為2個就沒有問題了。

2、使用這種引數化查詢的辦法,防止sql注入的任務就交給ado.net了, 如果在專案中統一規定必須使用引數化查詢,就不用擔心因個別程式設計師的疏忽導致的sql注入漏洞了。 但是,問題還沒有完,sql注入的漏洞是堵住了,但是查詢結果的正確性,引數化查詢並不能幫上什麼忙。

二、字串過濾(在上面方法不能阻止的情況下,可以使用該方法,不推薦使用)

//字串過濾,防止sql注入。

public bool ishassqlinject(string str)

}return ishassqlinject;

}

三、使用正規表示式過濾傳入的引數(這個方法沒有親自驗證,從網上找來的)

下面是具體的正規表示式:

檢測sql meta-characters的正規表示式 :/(%27)|(』)|(--)|(%23)|(#)/ix

修正檢測sql meta-characters的正規表示式 :/((%3d)|(=))1

*((%27)|(』)|(--)|(%3b)|(:))/i

典型的sql 注入攻擊的正規表示式 :/w*((%27)|(』))((%6f)|o|(%4f))((%72)|r|(%52))/ix

檢測sql注入,union查詢關鍵字的正規表示式 :/((%27)|(』))union/ix(%27)|(』)

檢測ms sql server sql注入攻擊的正規表示式:/exec(s|+)+(s|x)pw+/ix

結合regular expression使用,簡稱re是一種非常強大的文字驗證技術。if re.mathc(str,pattern).success then 繼續執行,這裡使用match方法來對使用者輸入的內容與定義好的模板進行驗證。

四、前端js防範sql注入(前端驗證只能起到一定作用,還需要後台引數化阻止sql注入)

var url = location.search;

var re=/^\?(.*)(select%20|insert%20|delete%20from%20|count\(|drop%20table|update%20truncate%20|asc\(|mid\(|char\(|xp_cmdshell|exec%20master|net%20localgroup%20administrators|\"|:|net%20user|\|%20or%20)(.*)$/gi;

var e = re.test(url);

if(e)

n ↩

防止SQL注入式攻擊

防止sql注入式攻擊 sql注入式攻擊是指利用設計上的漏洞攻擊系統。如果動態生成sql語句時沒有對使用者輸入的資料 進行過濾,便會使sql注入式攻擊得逞。例如用下面的sql語句判斷使用者名稱和密碼 txtsql select from user info where userid txtuserid...

防止 PHP的SQL 注入攻擊

如何防止 php sql 注入攻擊?我認為最重要的一點,就是要對資料型別進行檢查和轉義。總結的幾點規則如下 1.php.ini 中的 display errors 選項,應該設為 display errors off。這樣 php 指令碼出錯之後,不會在 web 頁面輸出錯誤,以免讓攻擊者分析出有作...

sql注入詳情 攻擊與防止

所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入 當應用程式使用輸入內容來構造動態sql...