跳至內容

SQL注入

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

SQL 注入(英語:SQL injection), 嘛稱SQL 隱碼抑是SQL 注碼,是發生佇應用程式佮資料庫層的安全漏洞。我簡來講,是佇輸入的字串內底挾帶 SQL 指令,佇咧設計不良的程式當中失覺察字元檢查,遮爾仔夾帶入去的惡意指令就會予資料庫侍服器誤認為是正常的 SQL 指令而執行,所以受著破壞抑是入侵。

有部份的人感覺 SQL 注入是干焦針對 Microsoft SQL Server,但是只要是支援處理 SQL 指令的資料庫侍服器,攏有可能受著這款手法的攻擊。

原因

伊應用程式內底若有理由狀況,可能是應用程式正暴露佇咧 SQL Injection 彼高風險狀況之下:

一 . 佇咧應用程式內底使用字串聯結方式或者是聯合查詢方式組合 SQL 指令。 二 . 佇應用程式連結資料庫的時使用權限過大的口座(譬如講誠濟開發人員攏愛用上濟權限的系統管理員口座(如常看著的 root,sa 等)連接資料庫)。 三 . 佇資料庫當中開放矣無必要毋過權力過大的功能(譬如講佇 Microsoft SQL Server 資料庫內底的 xp \ _ cmdshell 延伸預存的程序抑是 OLE Automation 預存程序等等) 四 . 傷過信任使用者所輸入的資料,未限制輸入的特殊字元,猶閣有使用者輸入的資料做藏佇指令的檢查。

作用原理

一 . SQL 命令會當查詢、插入去、更新、刪除等,命令的串接。若以分號字元為無仝命令的區別。(原本的作用是用於 SubQuery 抑是做查詢、插入去、更新、刪除…… 等的條件式) 二 . SQL 命令對傳入的字串參數是用單引號字元所包起來。(但連紲兩个單引號字元,佇咧 SQL 資料庫內底,則當做字串中的一个單引號字元) 三 . SQL 命令著,會當紮註解(連紲兩个減號字元 `--` 後的文字共註解,抑是「` / * `」佮「` * / `」所包起來的文字為註解) 四 . 所以,若是咧組合 SQL 的命令字串時,未針對單引號字元作跳脫處理的話,共這致使這字元變數咧添入去命令字串時,去予惡意竄改原本的 SQL 語法的作用。

某一个網站的登入驗證的 SQL 查詢代碼為惡意填入與時,將致使原底的 SQL 字串予人添做也就是實際上執行的 SQL 命令會變做下跤按呢的所在達到無數號密碼,亦可登入網站。所以乎 SQL 注入予人叫駭客的閬縫遊戲。

可能造成的傷害

一 . 資料表中的資料漏洩,譬如講企業佮個人機密資料,口座資料,密碼等。 二 . 資料結構予駭客探知,會當做進一步的攻擊(比如講 SELECT \ * FROM sys . tables)。 三 . 資料庫侍服器予人攻擊,系統管理員戶頭去予人竄改(比如講 ALTER LOGIN sa WITH PASSWORD='xxxxxx')。 四 . 取得系統較高權限了後,有可能會當佇網頁加入惡意連結、惡意代碼以及 Phishing 等。 五 . 經過資料庫侍服器提供的作業系統支援,予駭客會當修改抑是控制作業系統(比如講 xp \ _ cmdshell " net stop iisadmin " 會使停止侍服器的 IIS 服務)。 六 . 攻擊者利用資料庫提供的各種功能操縱檔案系統,寫入去 Webshell,落尾致使攻擊者攻陷系統七 . 破壞硬碟資料,半遂全系統(比如講 xp \ _ cmdshell " FORMAT C : ")。 八 . 取得系統上懸權限了後,會當針對企業內部的任一管理系統做大規模破壞,甚至予其企業倒去。 九 . 網站頭一頁予人竄改,致使聲譽受著損害。

避免的方法

一 . 佇設計應用程式的時陣,完全使用參數化查詢(Parameterized Query)來設計資料存取功能。 二 . 咧組合 SQL 字攕時,先針對所傳入的參數加入其他字元(共單引號字元前加上跳脫字元)。 三 . 若使用 PHP 若開發網頁程式,需要加入跳脫字元之功能(自動共所有的網頁傳入參數,共單引號字元前加上跳脫字元)。 四 . 使用 php 開發,可寫入去 html 特殊函式,會當正確的阻擋 XSS 攻擊。 五 . 其他,使用其他更加安全的方式連接 SQL 資料庫。譬如講已經修正過 SQL 注入問題的資料庫連接元件,比如講 ASP . NET 的 SqlDataSource 物件抑是 LINQ to SQL。 六 . 增強網頁應用程式防火牆的防禦力

歷史

有關 SQL 注入去的頭一擺公開討論始佇一九九八年左右。比如講,Phrack Magazine 中的一九九八年文章。

參考文獻

外部連結

  • 賽迪網-儲存程序以外:SQL 注入去深入防禦(繁體中文)
  • MSDN 的 SQL 資料注入概述(繁體中文)
  • MSDN 的 SQL 注入去概述(簡體中文)
  • Protecting yourself from SQL Injection Attacks by Ross Overstreet(英文)
  • " SQLrand : Preventing SQL Injection Attacks " by Stephen W . Boyd and Angelos D . Keromytis(英文)
  • " What is SQL Injection ? " By CGISecurity . com(英文)
  • " What is Blind SQL Injection ? " By CGISecurity . com(英文)
  • Avoid SQL injection(英文)
  • PHP and SQL Injections(英文)
  • SQL Injection in Login Forms(英文)
  • xkcd 上以 SQL 注入做主題的 bàng-gà(英文)