司法三等申論題
113年
[檢察事務官電子資訊組] 程式語言
第 一 題
📖 題組:
一、請回答下列問題:(每小題 10 分,共 30 分)
一、請回答下列問題:(每小題 10 分,共 30 分)
📝 此題為申論題,共 3 小題
小題 (一)
請簡要說明何謂「SQL 資料隱碼攻擊(SQL injection)」。
思路引導 VIP
看到這題,首先要點出 SQL Injection 的「核心定義」(惡意字串拼接導致的代碼注入)。接著,從程式語言理論的角度解釋其「發生原理」(資料被編譯器誤認為可執行指令),最後務必補充「防範方法」(如參數化查詢 Prepared Statement 的語義隔離機制),以展現全面且具深度的專業知識。
小題 (二)
系統使用下列 SQL 陳述(SQL statement)查詢資料庫以判斷是否為合法使用者。當該 SQL 陳述被執行時會檢查輸入的 username 與 password 是否存在於資料庫中,如果執行該 SQL 陳述有回傳任何結果,則表示認證成功,反之認證失敗。
SELECT * FROM db_user WHERE username='' AND password=''
假設惡意攻擊者可以輸入任意或是的資料,請以一個例子說明該 SQL 陳述會產生 SQL injection 的問題。
思路引導 VIP
看到此題,應立即聯想到 SQL Injection 的核心原理:攻擊者透過輸入特定的控制字元(如單引號 ')來提早閉合字串,並植入恆真邏輯(如 OR 1=1)或註解符號(如 --)。答題時除了給出具體惡意輸入外,必須清楚展示「被竄改後的完整 SQL 語法」,並從編譯與語義解析的角度,解釋為何該輸入能改變原有的邏輯判斷,最後補充防禦機制以獲取高分。
小題 (三)
請舉出至少兩種常見預防「SQL injection 攻擊」的方法並簡要說明。
思路引導 VIP
看到 SQL Injection,應立即聯想到這是「資料被編譯器/直譯器誤認為指令」的語義混淆問題。解題策略需從「資料與指令分離」的根本機制(參數化查詢/PreparedStatement)出發,再補充應用層面的防禦(白名單輸入驗證/字元跳脫)或框架層次(ORM 模型)。答題時若能結合記憶體層級的運作原理(如執行計畫快取、抽象語法樹解析)並附上生命週期標註的程式碼,將能大幅提升專業深度。