iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
Security

我的30天資安攻之路防身修練:實戰×工具×AI全紀錄系列 第 22

【DAY22】從 MVC 架構秒懂 SQL 注入攻防實作全攻略

  • 分享至 

  • xImage
  •  

今天要帶大家深入了解 SQL 注入(SQL Injection)這個經典網頁漏洞。


為什麼要重視 SQL 注入?

相信不管是資安新手還是老手,一提到 SQL 注入都不陌生。簡單來說,SQL 注入就是駭客利用網頁應用程式對使用者輸入資料驗證不足的漏洞,在資料庫查詢語句中插入惡意 SQL 代碼。結果是,駭客能夠未經授權取得、修改,甚至刪除資料庫裡的資料,一不小心整個系統就被操控了!

攻擊有多恐怖?像是透過輸入 ' OR '1'='1 這種經典語句繞過認證、用 UNION SELECT 撈取資料、利用錯誤訊息爆出系統資訊或是時間盲注等等。別小看它,就算簡單的字串拼接也會成為致命漏洞。


MVC 架構+用戶管理系統示範

先講講今天的主角專案,是一個簡單的用戶管理系統,讓使用者透過帳號登入查看個人資料。我們用 MVC 架構來整理整個流程:

  • Model:直接跟資料庫打交道,負責資料查詢與操作
  • View:呈現使用者界面(網頁畫面)
  • Controller:接收使用者請求,呼叫 Model 拿資料,再把結果送 View 顯示

專案中,我們初版 Model 有個致命缺陷:直接用字串拼 SQL!結果只要輸入一點奇怪的字串,就能輕鬆攻破系統。


攻擊示範:怎麼做出有漏洞的程式?

Controller 接收從 URL 或表單的帳號參數,Model 使用類似以下的查詢語句:
SELECT * FROM Users WHERE username = ' " + userInput + " '

假如攻擊者在帳號欄輸入:
' OR '1'='1

這時整個 SQL 查詢變成:
SELECT * FROM Users WHERE username = '' OR '1'='1'

因為條件永遠成立,攻擊者就能獲取全部用戶資料!


防禦實作:用參數化查詢徹底封鎖

要阻止 SQL 注入,最關鍵的是:

  • 參數化查詢(Prepared Statement):SQL 語句跟使用者輸入分開傳遞,資料庫知道輸入是純資料不是指令
  • ORM(物件關聯映射)框架:像是 Entity Framework,內建防護機制
  • 白名單輸入檢查:限制輸入格式、長度,避免出現不合法字元
  • 關閉詳細錯誤訊息:防止駭客利用錯誤內容推測後端結構
  • 最低權限原則:資料庫帳號只給予必要權限

改寫後的 Model 程式碼大致長這樣:

csharp
var cmd = new SqlCommand("SELECT * FROM Users WHERE username = @username");
cmd.Parameters.AddWithValue("@username", userInput);
var result = cmd.ExecuteReader();

同樣的輸入嘗試不會再造成資料外洩,完全被擋下來!


進階網頁滲透測試技巧

除了程式寫得安全,懂得怎麼測試網站是否被注入攻擊成功也很重要!

  • 使用工具如 Burp Suite 攔截與修改網頁請求,測試不同攻擊 payload
  • SQLMap 這套強力工具自動探測和利用 SQL 注入漏洞,快速看出漏洞點位及資料庫結構
  • 常見攻擊類型包括錯誤回顯注入、聯合查詢注入(Union-Based)、盲注兩種(Boolean-Based、Time-Based)

透過實戰測試,找出你的程式還有哪些被攻擊的縫隙,才有機會做進一步強化。


建議:

  • 絕對不要拿使用者輸入直接拼 SQL 語句!
  • Model 層負責安全查詢,Controller 嚴格檢查輸入格式
  • 滲透測試必備,定期檢查網站安全狀態
  • 綜合治理包含最小權限、錯誤訊息管控、白名單驗證

其實這些我們以前都介紹過了,但今天是想要真的從上機後的網站來實測看看這個可怕的自然漏洞,也希望可以介紹更多一點防禦工具讓自然防禦成為大家重視的課題!但是網站架設及鍵資料庫需要一點時間且防禦工具也要再熟悉一些,所以今天可能沒有辦法上畫面!這幾天會努力趕出來的。


來源
揭密SQL注入攻擊原理駭客工具示範演練攻防 https://www.netadmin.com.tw/netadmin/zh-tw/technology/BA57AAB19C8C4C0AB22479124F9F4B94
資訊安全從入門到差點入獄 https://s.itho.me/techtalk/2017/iThome-Teach-0322.pdf
秒懂SQL Injection https://tech-blog.cymetrics.io/posts/nick/sqli/


上一篇
【DAY21】如何建置與測試安全的網站?從OWASP Top 10到實用安全工具全攻略
下一篇
【DAY23】XSS攻防在MVC架構網站的應用與防護
系列文
我的30天資安攻之路防身修練:實戰×工具×AI全紀錄23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言