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

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

    什么是SQL注入

    SQL 是用于訪(fǎng)問(wèn)和處理數據庫的標準的計算機語(yǔ)言。

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

      

    SQL注入是由于開(kāi)發(fā)人員把用戶(hù)輸入拼接進(jìn)入數據庫查詢(xún)語(yǔ)句,導致原有查詢(xún)語(yǔ)義被篡改。

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

    SQL注入可被利用來(lái)完成獲取數據庫數據、提權、DOS等攻擊。

    工具:SQLMAP、啊D、明小子

      

    Sql注入帶來(lái)的威脅

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

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

    注入可以借助數據庫的存儲過(guò)程中進(jìn)行提權等操作。

    SQL注入常用函數

    Order by語(yǔ)句用于根據指定的列對結果進(jìn)行排序。

    Union select union運算符可以將二個(gè)或二個(gè)以上select語(yǔ)句的查詢(xún)結果集合合并成一個(gè)結果集合顯示,既執行聯(lián)合查詢(xún)。

    Version ()版本

    User () 數據庫用戶(hù)名

    Database ()數據庫名

    @@datadir 數據庫路徑

    @@version_compile_os –操作系統版本

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

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

      

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

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

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

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

    SQL注入攻擊防御

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

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

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

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

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

      

    總結

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

      


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