Vì vậy, tôi đã tự hỏi rằng điều này là đủ để được an toàn mà người dùng sẽ không làm bất kỳ tiêm SQL và số lượng sẽ được chỉ và luôn luôn số nguyên? Hàm $ id trong hàm getArticle được liên kết với truy vấn SQL.Is (int) và is_int() có an toàn để bảo vệ chống lại việc tiêm SQL không?
<?php $id = (isset($_GET['id']) && is_int((int)$_GET['id'])) ? (int)$_GET['id'] : false ?>
<?php $news = $class->getArticle($id) ?>
Đến nay tôi đã thử nghiệm nó hoạt động tốt, nhưng vì tôi không hoàn toàn chắc chắn tôi thích hỏi bạn guyz! Ok, mọi người nói rằng các câu lệnh chuẩn bị sẽ thực hiện thủ thuật. Họ thực sự sẽ? Giống như, tôi có thể hoàn toàn chắc chắn rằng nếu ràng buộc param như số nguyên nó sẽ là số nguyên không có gì khác?
Cảm ơn trước!
Tôi nghĩ rằng thử nghiệm cho 'is_int ((int) [ANYTHING])' sẽ luôn trả về 'true' và do đó thừa. Sử dụng 'is_numeric' để kiểm tra nếu một cái gì đó ** có thể được chuyển đổi thành ** một' int' và sau đó sử dụng '(int)' để thực hiện chuyển đổi. Hoặc để lại bước đầu tiên, vì (int) sẽ tạo một 'int' bằng 0 trên các giá trị không thể nhận ra. – MvanGeest
hãy cẩn thận nếu tham số $ _GET của bạn xuất phát từ biểu mẫu | bool is_int (hỗn hợp $ var) | Tìm xem loại biến đã cho là số nguyên hay không. Lưu ý: Để kiểm tra nếu một biến là một số hoặc một chuỗi số (chẳng hạn như đầu vào biểu mẫu, mà luôn luôn là một chuỗi), bạn phải sử dụng is_numeric(). – Redlab