SQL injection
SQL注入式攻擊是什麼?認識SQL injection與預防|天矽科技網頁設計
SQL注入式攻擊 (SQL injection)
SQL注入式攻擊 (SQL injection),也稱為SQL資料隱碼 或SQL注碼攻擊,它是一種常見的駭客攻擊方式,是發生在網站、應用程式與資料庫之間的安全漏洞,駭客會在設計不良的程式中夾帶惡意指令,讓資料庫伺服器誤以為該指令是正常的SQL指令而執行,因此遭到破壞或入侵。
只要網站中有提供使用者輸入的欄位,那麼網站就很有可能暴露在SQL injection的風險中,駭客可以透過截斷原本程式的語意,插入希望執行的程式碼,以達到攻擊的作用。
根據中華資安在2021上半年的網站攻擊趨勢報告中顯示,國內企業網站平均有4個以上的高風險漏洞,這四個漏洞包括…
- 跨站指令碼攻擊 (Cross site scripting, XSS)
- 遠端程式執行碼漏洞
- 伺服器目錄遊走攻擊(Server Directory Traversal)
- SQL程式碼注入攻擊 (SQL Injection)
不過慶幸的是,從開發人員的角度來看,SQL注入式攻擊很容易被發現及修復,只要透過測試工具都可以立即發現、提早修復這個安全漏洞。
延伸閱讀:
中華資安:企業網站平均逾4個高風險漏洞
SQL injection攻擊原理
SQL是網站用來與資料庫溝通並取得資料的程式語言,SQL injection則是駭客透過修改SQL語句改變語意,達到破壞或入侵的目的行為。(延伸閱讀:SQL是什麼?結構化查詢語言基礎介紹)
- SQL命令,可查詢插入、更新、刪除等命令串接,以分號字元為不同命令的區域。(原作用是用於SubQuery或查詢、插入、更新、刪除…等的條件式)
- SQL命令,對於傳入的字串參數,是用單引號字元所包起來的,但是若為連續兩個單引號字元,在SQL資料庫中,則視為字串中的一個單引號字元。
- SQL命令,可以夾帶註解,連續兩個「減號字元」後的文字,或「斜線米字」「米字斜線」所包起來的文字與為其註解。
- 若在組合SQL的命令字串時,沒有針對單引號字元做跳脫處理,將導致該字元變數在填入命令字串時,被惡意竄改原本的SQL語法的作用。
假設某個SQL語句的語意為…
正常取出使用者資料:
【滿足】使用者名稱等於「使用者輸入的名稱」
【並且】使用者密碼等於「使用者輸入的密碼」
駭客改寫的SQL語句:
【滿足】使用者名稱等於「使用者輸入的名稱」
【並且】使用者密碼等於「使用者輸入的密碼」或「錯誤密碼」
因此,網站中只要有提供輸入的欄位,就有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十大安全風險排行