Trong Mã PHP mới đoạn mã, bạn vẫn dễ bị tiêm thuốc.
Bạn đang sử dụng một tuyên bố đã chuẩn bị sẵn trong phần phụ trang, nhưng bạn đang không thực sự sử dụng các điểm mạnh của chế phẩm một cách chính xác.
Khi tạo một câu lệnh đã chuẩn bị, bạn sẽ tạo một truy vấn trong đó bạn thêm phần giữ chỗ thay vì các giá trị thô:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Dấu chấm hỏi là chỗ dành sẵn và sau đó được thay thế bằng bind_param
phương pháp:
$stmt->bind_param('ss', $email, $pw);
ss
một phần của lệnh gọi ràng buộc cho mysql db biết rằng hai chuỗi của nó đã được chuyển đến cơ sở dữ liệu ( s cho string
, i cho int
vv).
Bạn đang ràng buộc một tham số ($name
) nhưng nó không có trình giữ chỗ cũng như bất kỳ loại tham chiếu nào trong truy vấn ..?
Mặt khác, câu lệnh select của bạn vẫn không an toàn và có lỗ hổng bảo mật.
Tôi có thể sẽ sử dụng một câu lệnh đã chuẩn bị sẵn ở đó, giống như với phần chèn.
Bạn luôn muốn đảm bảo rằng đầu vào từ người dùng là "an toàn" cho cơ sở dữ liệu, nếu bạn nối chuỗi truy vấn và thêm đầu vào của người dùng vào nó, cơ sở dữ liệu sẽ không thoát khỏi chuỗi, nó sẽ chạy nó.
Chỉ sử dụng query
chuẩn phương thức gọi khi bạn tự viết toàn bộ truy vấn mà không có bất kỳ tham số đầu vào nào và đặc biệt là không có tham số đầu vào nào mà người dùng đã chuyển!