Phòng thủ SQLi mạnh nhất là parameterized query: dữ liệu được truyền tách rời khỏi câu lệnh và được escape an toàn. Hãy mô phỏng: thay mỗi dấu ? trong mẫu câu lệnh bằng tham số tương ứng (theo thứ tự), bọc trong nháy đơn, và escape nháy đơn bên trong bằng cách nhân đôi (' -> '').
?).Nếu hết tham số mà còn ?, giữ nguyên ?.
SELECT * FROM u WHERE name=?
O'Brien
-> SELECT * FROM u WHERE name='O''Brien'
Dòng 1 là mẫu câu lệnh; mỗi dòng sau là một tham số.
Số tham số <= 10. Mỗi dòng <= 500 ký tự.
In câu lệnh đã thay tham số an toàn.
Ví dụ:
Đầu vào:
SELECT * FROM u WHERE name=?
O'Brien
Đầu ra:
SELECT * FROM u WHERE name='O''Brien'
Giải thích:
Đang tải editor...