淺入淺出SQL注入

2021-12-29 22:13:42 字數 2642 閱讀 3053

已經開始了學習牛腩新聞發布系統,在講後台**的時候講了一些重構sqlhelper 的知識,儲存過程和觸發器等,這些以前都是接觸過的。而 sql 注入是以前沒有注意過的,所以停下來總結學習一下 sql 注入。

首先什麼是 sql 注入呢?

實戰篇 ~~~~~~~~~~

sql 注入概念

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

通俗的說就是,當在瀏覽器網頁中輸入一些可能是查詢字串的一部分時,這樣就使得惡意破壞人可以指導乙個**的連線資料庫的名稱和裡面的表,這就是由於拼接字串引起的。在新聞發布系統中的小例子:

新聞類別類插入函式的**

public bool insert(string caname) ;

int res = sqlhelper.executenonquery(sql, commandtype.text);

if (res > 0) //**段,連續兩次按table鍵顯示**段

return flag;

}     如果是這樣的話:在網頁輸入框中輸入類似

——             娛樂新聞 ')delete category where id=3--  的語句就會發生 sql 注入。

這樣的話,就會在插入娛樂新聞的時候同時刪除 id 為 3 的那條類別。這就是sql 注入,造成了資料庫的不安全,是因為正好拼接了字串, insert intocategory(name) values( ' 娛樂新聞 ' ) delete category whereid=3-

解決方法是使用引數,將 sql 語句該成為:

/// /// 增加類別

///

/// 新聞類別名稱

///

public bool insert(string caname)

; int res = sqlhelper.executenonquery(sql, paras, commandtype.text); //防止sql注入

if (res > 0) //**段,連續兩次按table鍵顯示**段

return flag;

}  引數化查詢為什麼可以防止 sql 注入?

1 、引數過濾,資料庫中實際執行的 sql 語句

2 、執行計畫重用

因為引數化查詢可以重用執行計畫,並且如果重用執行計畫的話, sql所要表達的語義就不會變化,所以就可以防止 sql 注入,如果不能重用執行計畫,就有可能出現 sql 注入,儲存過程也是一樣的道理,,因為可以重用執行計畫。

擴充套件篇~~~~~~~~~~

sql 注入原因

sql 注入的產生原因通常表現在以下幾方面:

1 、不當的型別處理

2 、不安全的資料庫配置

3 、不合理的查詢集處理

4 、不當的錯誤處理

5 、轉義字元處理不合適

6 、多個提交處理不當

sql 注入攻擊指的是通過構建特殊的輸入作為引數傳入 web 程式,而這些輸入大都是 sql 語法裡的一些組合,通過執行 sql 語句進而執行 攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。    

sql注入的影響

當應用程式使用輸入內容來構造動態sql語句以訪問資料庫時,會發生sql注入攻擊。如果**使用儲存過程,而這些作為包含未篩選的使用者輸入的字串來傳遞,也會發生sql注入。sql注入可能導致攻擊者使用應用程式登陸在資料庫中執行命令。相關的sql注入可以通過測試工具pangolin進行。如果應用程式使用特權過高的帳戶連線到資料庫,這種問題會變得很嚴重。在某些表單中,使用者輸入的內容直接用來構造動態sql命令,或者作為儲存過程的輸入引數,這些表單特別容易受到sql注入的攻擊。而許多**程式在編寫時,沒有對使用者輸入的合法性進行判斷或者程式中本身的變數處理不當,使應用程式存在安全隱患。這樣,使用者就可以提交一段資料庫查詢的**,根據程式返回的結果,獲得一些敏感的資訊或者控制整個伺服器,於是sql注入就發生了。

防護sql注入

既然存在sql注入

的影響,那麼怎樣防止sql注入呢?

1.永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正規表示式,或限制長度;對單引號和

雙"-"進行轉換等。

2.永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢訪問。

3.永遠不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。

4.不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊。

5.應用的異常資訊應該給出盡可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝

總結篇~~~~~~~~~~

sql注入,一聽上去是多麼專業的名詞啊!可以如果要是有人故意因為這點漏洞就侵入資料庫就不好了。同時也有各種各樣的人在探尋sql注入的方法,他們的手法相當靈活,讓我們防不勝防。而我們的防護能不能根據具體情況進行分析,構造巧妙的sql語句,從而成功防護了想要進行sql注入的資料庫才是高手與「菜鳥」的區別。

淺入淺出SQL注入

在搜尋框中輸入娛樂新聞 deletecategory where id 3 出現了如下所示狀況。可以看到,資料庫中增加了乙個娛樂新聞,但是同時id 3的那條記錄從資料庫中消失了,這是為什麼呢?看一下插入語句是怎麼寫的,insertinto category name values nfdsa 剛才在...

XGBoost淺入淺出

xgboost風靡kaggle 天池 datacastle kesci等國內外資料競賽平台,是比賽奪冠的必備大殺器。我在之前參加過的一些比賽中,著實領略了其威力,也取得不少好成績。如果把資料競賽比作金庸筆下的武林,那麼xgboost可謂屠龍刀,號令天下,莫敢不從!倚天不出,誰與爭鋒?xgboost工...

XGBoost淺入淺出

xgboost風靡kaggle 天池 datacastle kesci等國內外資料競賽平台,是比賽奪冠的必備大殺器。我在之前參加過的一些比賽中,著實領略了其威力,也取得不少好成績。如果把資料競賽比作金庸筆下的武林,那麼xgboost可謂屠龍刀,號令天下,莫敢不從!倚天不出,誰與爭鋒?xgboost工...