防止SQL注入

2021-09-22 01:41:58 字數 1964 閱讀 8961

防止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)|(=))[^\n]*((%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)p\w+/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)

防止SQL注入

1.什麼是sql注入 所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。通過遞交引數構造巧妙的sql語句,從而成功獲取想要的資料。2.sql注入的種類 從具體而言,sql注入可分為五大類,分別是 數字型注入 字元型注入...

防止SQL注入

最近看到很多人的 都被注入js,被iframe之類的。非常多。本人曾接手過乙個比較大的 被人家入侵了,要我收拾殘局。1.首先我會檢查一下伺服器配置,重新配置一次伺服器安全,可以參考 2.其次,用麥咖啡自定義策略,即使 程式有漏洞,別人也很難在檔案上寫入 了。參考自定義策略,有了這個策略,再爛的程式,...

防止Sql注入

防不勝防 可以肯定的說,過濾不是辦法,而且效率很低 過濾的目的主要是提供反饋資訊,必須前後臺都要做 但是,有很多辦法可以繞過 致命的單引號 能做的事情按重要性大致如下 1。資料庫訪問用預定義會話 preparedstatement 從根本上防止sql截斷 2。後台過濾 為輸入的資訊提供反饋資訊,只要...