阿摩線上測驗 登入

申論題資訊

試卷:113年 - 113 司法特種考試_三等_檢察事務官電子資訊組:程式語言#122108
科目:程式語言
年份:113年
排序:0

申論題內容

(二)系統使用下列 SQL 陳述(SQL statement)查詢資料庫以判斷是否為合法使用者。當該 SQL 陳述被執行時會檢查輸入的 username 與 password 是否存在於資料庫中,如果執行該 SQL 陳述有回傳任何結果,則表示認證成功,反之認證失敗。
SELECT * FROM db_user WHERE username='<USERNAME>' AND password='<PASSWORD>'
假設惡意攻擊者可以輸入任意<USERNAME>或是<PASSWORD>的資料,請以一個例子說明該 SQL 陳述會產生 SQL injection 的問題。

詳解 (共 1 筆)

詳解 提供者:hchungw

在提供的 SQL 陳述中,攻擊者可以通過輸入特製的 <USERNAME> 和 <PASSWORD>,來利用 SQL injection 攻擊。以下是一個例子:

假設惡意攻擊者在 <USERNAME> 欄位中輸入:

bash
複製程式碼
' OR '1'='1

並在 <PASSWORD> 欄位中輸入任意值,例如空字串。那麼最終的 SQL 陳述會變成:

sql
複製程式碼
SELECT * FROM db_user WHERE username='' OR '1'='1' AND password=''

在這個例子中,條件 '1'='1' 始終為真,這導致 SQL 查詢會返回所有的使用者資料,而無需驗證真實的 username 和 password。這樣,攻擊者就可以繞過身份驗證機制,成功登入系統。

這種情況下,SQL injection 使攻擊者能夠控制 SQL 查詢的邏輯,繞過身份驗證,甚至訪問或篡改數據庫中的敏感數據。為防止這類攻擊,可以使用參數化查詢預備語句來確保使用者輸入的內容不會直接被解釋為 SQL 語句的一部分。