什麼是 SQL Injection 攻擊 ?

CK Yang
Oct 26, 2020

SQL Injection 又稱做 SQL 隱碼攻擊,意思是可以在一個input輸入框內輸入夾帶SQL指令,如果你的網站在未過濾一些惡意的SQL指令的情況下,有可能就會讓資料庫誤認為是正常的SQL指令導致被執行,使得駭客可以擅自刪除、更新或竊取整個資料庫裡的內容。

參考來源: CIPSEC官方

我們以上圖來看,目前受到 SQL Injection 的攻擊還是佔了整整32%,還是算常見的攻擊手法,那接下來我們來示範一下到底是怎麼攻擊的

舉例如果在後端框架是 Rails 的話輸入帳號 SQL 可能會有以下的指令:

SELECT * FROM "users" WHERE "user"."name" = '這邊是user_name'

那如果我們input欄位寫 ' or 1='1

整個SQL指令會變成以下,類似這樣的手法就有可能造成無帳密也能登入到您的網站

SELECT * FROM "users" WHERE "user"."name" = '' or 1='1';

所以說如果再狠心一些甚至直接寫 DROP,就可以直接把整個資料表刪除!

SELECT * FROM "users" WHERE "user"."name" = ''; DROP TABLE 'user';

作用的原理

  1. SQL指令包括查詢、插入、更新、刪除等等而且都是以分號字元為結尾。
  2. SQL指令對於傳入的字串參數是以單引號字元包起來的。
  3. SQL命令中,可以夾帶註解,2個減號字元 — — 之後的文字都會變成註解。

該如何預防?

防禦的部分可以參考這篇文章 Ruby on Rails 實戰聖經 其中也有講到,該如何預防以及其他網路攻擊

--

--