SQL injection

SQL注入式攻擊是什麼?認識SQL injection與預防|天矽科技網頁設計

SQL注入式攻擊是什麼?認識SQL injection與預防|天矽科技網頁設計

 

根據網站攻擊趨勢報告中顯示,國內企業網站平均有4個以上的高風險漏洞,其中之一就是「SQL注入式攻擊(SQL injection)」,只要網站中有提供使用者輸入的欄位,網站就有可能暴露在SQL injection的風險之中。

SQL注入式攻擊 (SQL injection)


 SQL注入式攻擊 (SQL injection),也稱為SQL資料隱碼 或SQL注碼攻擊,它是一種常見的駭客攻擊方式,是發生在網站、應用程式與資料庫之間的安全漏洞,駭客會在設計不良的程式中夾帶惡意指令,讓資料庫伺服器誤以為該指令是正常的SQL指令而執行,因此遭到破壞或入侵。

 只要網站中有提供使用者輸入的欄位,那麼網站就很有可能暴露在SQL injection的風險中,駭客可以透過截斷原本程式的語意,插入希望執行的程式碼,以達到攻擊的作用。

 根據中華資安在2021上半年的網站攻擊趨勢報告中顯示,國內企業網站平均有4個以上的高風險漏洞,這四個漏洞包括…

  1. 跨站指令碼攻擊 (Cross site scripting, XSS)
  2. 遠端程式執行碼漏洞
  3. 伺服器目錄遊走攻擊(Server Directory Traversal)
  4. SQL程式碼注入攻擊 (SQL Injection)

 不過慶幸的是,從開發人員的角度來看,SQL注入式攻擊很容易被發現及修復,只要透過測試工具都可以立即發現、提早修復這個安全漏洞。

延伸閱讀:
中華資安:企業網站平均逾4個高風險漏洞

 

SQL injection攻擊原理


 SQL是網站用來與資料庫溝通並取得資料的程式語言,SQL injection則是駭客透過修改SQL語句改變語意,達到破壞或入侵的目的行為。(延伸閱讀:SQL是什麼?結構化查詢語言基礎介紹
 

  1. SQL命令,可查詢插入、更新、刪除等命令串接,以分號字元為不同命令的區域。(原作用是用於SubQuery或查詢、插入、更新、刪除…等的條件式)
     
  2. SQL命令,對於傳入的字串參數,是用單引號字元所包起來的,但是若為連續兩個單引號字元,在SQL資料庫中,則視為字串中的一個單引號字元。
     
  3. SQL命令,可以夾帶註解,連續兩個「減號字元」後的文字,或「斜線米字」「米字斜線」所包起來的文字與為其註解。
     
  4. 若在組合SQL的命令字串時,沒有針對單引號字元做跳脫處理,將導致該字元變數在填入命令字串時,被惡意竄改原本的SQL語法的作用。

SQL injection攻擊原理

 

假設某個SQL語句的語意為…

正常取出使用者資料:
【滿足】使用者名稱等於「使用者輸入的名稱」
【並且】使用者密碼等於「使用者輸入的密碼」

駭客改寫的SQL語句:
【滿足】使用者名稱等於「使用者輸入的名稱」
【並且】使用者密碼等於「使用者輸入的密碼」或「錯誤密碼」

SQL injection攻擊原理

 因此,網站中只要有提供輸入的欄位,就有SQL injection的風險;除此之外,若在網站或應用程式中有以下的狀況,也可能正暴露在SQL injection的風險之中。

  • SQL組合指令,使用字串連結方式或聯合查詢方式。
  • 網站或應用程式連結資料庫時,使用權限過大的帳戶來連結資料庫,比如用最高權限系統管理員帳戶來連結資料。
  • 在資料庫中,開放了不必要且權力過大的功能。
  • 過度信任使用者所輸入的資料,沒有限制輸入的特殊字元,或沒有對使用者輸入的資料做潛在指令檢查。

 

SQL injection造成原因

SQL injection造成的原因可能是…

  • 未驗證的輸入 (non-validated input vulnerabilities)
  • 未授權的存取 (gain unauthorized access)
  • 應用程式的弱點 (flaw in web applications)
  • 未經授權的訪問資料庫、直接檢索資料庫訊息

 

可能同時存在的弱點…

  • 身份驗證(Authentication By Pass)
  • 機敏資訊暴露(Information Disclosure)
  • 受損資訊完整性(Compromised Data Integrity)
  • 受損資訊可用性(Compromised Availability Of Data)
  • 遠程代碼執行(Remote Code Execution)

 

如何避免SQL injection


 根據維基百科的文獻說明,有以下幾種避免方式。

  • 建置網站或設計應用程式時,使用「參數化查詢 (Parameterized Query)」來設計資料存取功能。
    ※此方式已被視為最可以有效預防SQL injection攻擊的防禦方式
  • 組合SQL字串時,先針對傳入的參數加入其他字元,將單引號字元前加上跳脫字元。
  • 使用PHP開發網頁程式時,加入跳脫字元之功能,自動將所有的網頁傳入參數,將單引號字元前加上跳脫字元。
  • 使用其他更安全的方式連接SQL資料庫,比如已修正過SQL注入問題的資料庫連接元件。
  • 增強WAF防火牆的防禦力。

 

參考資料:
維基百科|SQL注入
iThome|Day13 常見的攻擊手法-SQL注入
程式猿吃香蕉 |網站安全一次看懂 SQL Injection 的攻擊原理—「雍正繼位之謎」

延伸閱讀:
Acunetix網頁弱點掃描,網站漏洞應立即修補
WAF防火牆是什麼?2021十大安全風險排行

 

share FB LINE
看天矽作品集 回上一頁
ID:@323foylw