本帖最後由 artai 於 2025-2-10 09:40 編輯
Program 寫果陣, 直接將 text field 的資料送去俾SQL
呢個係program 手段裡面做得唔夠安全的情況
e.g.
login, SQL 原來應該係
SELECT * FROM USER WHERE (USER.user_name ='INPUT_1' AND USER.password ='INPUT_2'
基於SQL ';' 是完成本句SQL 的意思, 如果我在 password 的INPUT_2裡輸入:
xxx'; UPDATE USER (password = '1234') WHERE user_name ='admin'; UPDATE USER (password = '1234') WHERE user_name ='root';
Database 接收到的語句就會係:
SELECT * FROM USER WHERE (USER.user_name ='INPUT_1' AND USER.password ='xxx';
UPDATE USER (password = '1234') WHERE user_name ='admin';
UPDATE USER (password = '1234') WHERE user_name ='root';
這三句SQL, 然後直接執行咗
Program層面, 第一名一定報錯, 所以會彈咗去登入錯誤, 但同時如果系統裡面真係有admin/ root 呢個用戶, 呢個用戶的密碼已經被接中咗及改咗密碼! 呢個網站全部嘢都會俾人控制晒! |