展開
湖北國聯(lián)計算機科技有限公司
  • 首頁HOME
  • 公司簡介INTRODUCTION
  • 安全防御DEFENSE
  • 軟件開發(fā)SOFTWARE
  • 物聯(lián)網(wǎng)IOT
  • 運行維護SRE
  • 成功案例CASE
  • 聯(lián)系我們CONTACT
  • Defense Q&A |網(wǎng)安Q&A

    湖北國菱帶你了解SQL
    來源:湖北國菱計算機科技有限公司-荊州網(wǎng)站建設(shè)-荊州軟件開發(fā)-政府網(wǎng)站建設(shè)公司 時間:2021-01-12

    什么是SQL注入

    SQL 是用于訪問和處理數(shù)據(jù)庫的標(biāo)準(zhǔn)的計算機語言。

    所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。

      

    SQL注入是由于開發(fā)人員把用戶輸入拼接進入數(shù)據(jù)庫查詢語句,導(dǎo)致原有查詢語義被篡改。

    SQL注入技術(shù)分為報錯注入、Union注入、時間盲注、布爾注入、堆疊注入等。

    SQL注入可被利用來完成獲取數(shù)據(jù)庫數(shù)據(jù)、提權(quán)、DOS等攻擊。

    工具:SQLMAP、啊D、明小子

      

    Sql注入帶來的威脅

    猜解后臺數(shù)據(jù)庫,盜取網(wǎng)站的敏感信息。

    繞過認證,列如繞過驗證登陸網(wǎng)站后臺

    注入可以借助數(shù)據(jù)庫的存儲過程中進行提權(quán)等操作。

    SQL注入常用函數(shù)

    Order by語句用于根據(jù)指定的列對結(jié)果進行排序。

    Union select union運算符可以將二個或二個以上select語句的查詢結(jié)果集合合并成一個結(jié)果集合顯示,既執(zhí)行聯(lián)合查詢。

    Version ()版本

    User () 數(shù)據(jù)庫用戶名

    Database ()數(shù)據(jù)庫名

    @@datadir 數(shù)據(jù)庫路徑

    @@version_compile_os –操作系統(tǒng)版本

    concat():連接一個或者多個字符串

    group_concat():連接一個組的所有字符串,并以逗號分隔每一條數(shù)據(jù)

      

    mysql 5.0版本以后提供了information.schema表,表中記錄了數(shù)據(jù)庫中所有的庫、表、列等信息

    SCHEMATA表:儲存mysql所有數(shù)據(jù)庫的基本信息,包括數(shù)據(jù)庫名,編碼類型路徑等,show databases的結(jié)果取之此表

    TABLES表:儲存mysql中的表信息,(當(dāng)然也有數(shù)據(jù)庫名這一列,這樣才能找到哪個數(shù)據(jù)庫有哪些表嘛)包括這個表是基本表還是系統(tǒng)表,數(shù)據(jù)庫的引擎是什么,表有多少行,創(chuàng)建時間,最后更新時間等。show tables from schemaname的結(jié)果取之此表

    COLUMNS表:提供了表中的列信息,(當(dāng)然也有數(shù)據(jù)庫名和表名稱這兩列)詳細表述了某張表的所有列以及每個列的信息,包括該列是那個表中的第幾列,列的數(shù)據(jù)類型,列的編碼類型,列的權(quán)限,注釋等。是show columns from schemaname.tablename的結(jié)果取之此表

    SQL注入攻擊防御

    上面我們對SQL注入的原理和危害進行了講解,并以攻擊者的角度對SQL注入漏洞的利用過程進行了演示。下面我們以管理者的身份,從防御的角度來談一下SQL防注入。
    通過SQL注入的原理我們得知,要想成功利用SQL注入漏洞,需要同時滿足兩個條件,一是攻擊者可以控制用戶的輸入,二是注入的代碼要被成功執(zhí)行。下面的內(nèi)容主要圍繞這兩個方面來展開。
    首先,我們需要對從其他地方傳遞過來的參數(shù)在進入數(shù)據(jù)庫之前進行正確的處理。主要有以下幾個方面:

    1.使用預(yù)編譯語句,綁定變量。

    2.對傳入的參數(shù)進行驗證,確保符合應(yīng)用中定義的標(biāo)準(zhǔn)。主要有白名單和黑名單兩種方法來實現(xiàn)。從理論上來講,白名單的安全性要比黑名單高,因為它只允許在白名單中定義的數(shù)據(jù)通過,其他數(shù)據(jù)都會被過濾掉。黑名單只會過濾定義在黑名單中的數(shù)據(jù)(比如SQL注入中的一些危險字符),通常使用正則表達式來實現(xiàn)。但需要注意的是,由于黑名單不可能包含所有的危險字符,所以可能會出現(xiàn)黑名單被繞過的情況。例如在mysql注入中,當(dāng)在黑名單中過濾了空格字符,我們可以使用'/*(mysql中注釋符)'和'+'來代替空格,繞過黑名單的限制繼續(xù)注入,因此我們應(yīng)該盡量多使用白名單。

    除了對用戶的輸入進行了驗證之外,有時因為程序員的安全意識和技術(shù)問題,也可能只是一個小小的疏忽,都有可能產(chǎn)生SQL注入漏洞。還有一種情況是,我們發(fā)現(xiàn)了SQL注入漏洞,但是由于條件所限或者其他原因,不能從代碼層來修復(fù)漏洞。比如在某一企業(yè)中有一套Web系統(tǒng)是由A程序員開發(fā)的,過了一段時間A離職了。后來,發(fā)現(xiàn)這套系統(tǒng)存在SQL注入漏洞,這時再讓A程序員回來修復(fù)漏洞幾乎是不可能的。而其他程序員由于對這套系統(tǒng)不熟悉或是因為技術(shù)問題沒有能力修復(fù)這個漏洞。這種情況在中小企業(yè)更為普遍。這時我們雖然不能從代碼層修復(fù)漏洞,但我們可以采用一些其他方式來阻止漏洞被利用成功,把面臨的風(fēng)險降到最低。如可以布署WAF(Web應(yīng)用防火墻)來阻斷SQL注入攻擊,雖然有些攻擊者可以繞過WAF的限制,但畢竟是少數(shù)。對于絕大多數(shù)的攻擊WAF都是可以檢測到并阻斷。即便是高水平的攻擊者,在布署WAF以后,也會明顯使漏洞利用變得困難。

    最后,在數(shù)據(jù)庫方面,應(yīng)該使用“最小權(quán)限原則”,避免Web應(yīng)用使用高權(quán)限賬戶直接連接數(shù)據(jù)庫。如果有多個不同的應(yīng)用使用同一數(shù)據(jù)庫,則應(yīng)該為每個應(yīng)用分配不同的賬戶,并且只賦予必要的權(quán)限。

      

    總結(jié)

    其實在平常項目中,如果我們用了各種框架,并不需要我們來做防sql注入工作,因為框架已經(jīng)幫我們封裝好了,但是我們一旦用原始的獲取用戶輸入值的方式,就必須注意防止sql注入了。sql注入攻防原理是必須懂的,并時刻謹記于心,安全無事小,必須在每一個環(huán)節(jié)都注意防護。

      


    荊州地區(qū)政府網(wǎng)站建設(shè) 解決方案 專業(yè)團隊 騰訊第三方平臺 地址:湖北省荊州市沙市區(qū)荊沙大道楚天都市佳園一期C區(qū)29棟112       地址:湖北省松滋市新江口街道才知文化廣場1幢1146-1151室     郵編:434200 聯(lián)系電話:0716-6666211     網(wǎng)站編輯部郵箱:business@gl-ns.com 鄂公網(wǎng)安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業(yè)名稱:湖北國菱計算機科技有限公司