Sql = "SELECT * FROM Users WHERE Username = '" + name + "' AND Password = '" + passWord + "'";
若使用者輸入帳號:111'or'1=1,密碼任意(如 aaaa),實際執行 SQL 變為:
SELECT * FROM Users WHERE Username = '111'or'1=1' AND Password = 'aaaa'
因 1=1 永真,OR 短路導致密碼驗證被繞過,任意密碼皆能登入。
知名網路遊戲《笑傲江湖》早期版本即存在此漏洞,暴露出開發者安全意識薄弱。一個微小疏漏可能造成嚴重後果。
SqlParameter、OleDbParameter 等,徹底分離程式碼與資料。安全非功能性需求,而是系統設計的基石。每一行拼接 SQL 的程式碼都是潛在風險點,請養成參數化查詢的肌肉記憶。