SQL injection · truy vấn tham số hóa

Nối chuỗi biến dữ liệu thành code, tham số hóa thì không

SQL injection: nối chuỗi so với truy vấn tham số hóa Cùng input ' OR '1'='1 ở ô email. Cách nối chuỗi dán input vào câu SQL thành WHERE c.email = '' OR '1'='1', PostgreSQL hiểu OR '1'='1' là điều kiện luôn đúng nên trả về cả 40 đơn. Cách tham số hóa gửi câu SQL có $1 và giá trị riêng, PostgreSQL chốt cấu trúc câu trước rồi mới điền giá trị như một chuỗi, nên trả về 0 dòng. CÁCH 1 · NỐI CHUỖI CÁCH 2 · TRUY VẤN THAM SỐ HÓA INPUT Ô nhập email người dùng gõ vào: ' OR '1'='1 APP Ghép chuỗi dán input vào SQL "... email = '" + email + "'" SQL Câu SQL nhận được WHERE c.email = '' OR '1'='1' input đã thành code PARSE PostgreSQL đọc OR '1'='1' điều kiện luôn đúng KẾT QUẢ Lộ dữ liệu 40 / 40 đơn của mọi khách APP Gửi tách riêng SQL: ... email = $1 tham số: [email] hai phần không trộn PARSE Chốt cấu trúc trước câu lệnh đã cố định, $1 chỉ là ô giá trị BIND Điền giá trị $1 = ' OR '1'='1 chỉ là một chuỗi KẾT QUẢ An toàn 0 dòng không có email đó Nối chuỗi: dữ liệu người dùng thành một phần câu lệnh. Tham số hóa: dữ liệu luôn chỉ là dữ liệu. © tiennhm