高考申論題
111年
[資訊處理] 程式設計
第 一 題
📖 題組:
資料庫是企業組織或政府部門中用以保存大量資料的機制。下圖為資料表的結構,請回答以下各小題。(每小題 10 分,共 20 分) [圖表描述:employee 包含 id(varchar 10), first_name, last_name。salary_slip 包含 id(varchar 10), year, month, amount。兩者由 id 關聯]
資料庫是企業組織或政府部門中用以保存大量資料的機制。下圖為資料表的結構,請回答以下各小題。(每小題 10 分,共 20 分) [圖表描述:employee 包含 id(varchar 10), first_name, last_name。salary_slip 包含 id(varchar 10), year, month, amount。兩者由 id 關聯]
📝 此題為申論題,共 2 小題
小題 (一)
請以 SQL 列出某一個人的年度薪資總額,必須顯示 id, first_name, last_name 及總額。
思路引導 VIP
看到這題應立刻聯想到「多表關聯 (JOIN)」與「聚合函數 (SUM)」的組合應用。首先利用 id 欄位將 employee 與 salary_slip 兩表進行內部連接;接著根據「某個人」與「年度總額」的需求,透過 WHERE 條件篩選特定員工與年份,並務必使用 GROUP BY 搭配 SUM() 處理加總邏輯。
小題 (二)
現在的資料查詢服務常見於網頁系統,而 SQL Injection 是最常見的資料庫攻擊方式。請問下列查詢語句是否會有被攻擊的疑慮?若有的話該如何改善?程式碼可以使用 PHP 或 ASP.NET。
SELECT first_name, last_name FROM employee WHERE id=’A001’
思路引導 VIP
考生應先判斷該 SQL 語句若為純靜態的常數字串則無風險,但實務上網頁系統的查詢條件通常來自外部輸入且容易被開發者以「字串串接」的方式處理,此時便存在 SQL Injection 漏洞。解題時必須明確指出這個前提,並提出使用「參數化查詢 (Parameterized Query)」或「預處理陳述式 (Prepared Statement)」作為標準防護機制,最後附上結構完整、具備防護意識的 PHP (PDO) 或 ASP.NET 程式碼範例以獲取高分。