Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP / MySQLi:Cách ngăn chặn việc đưa SQL vào INSERT (mã hoạt động một phần)

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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql lỗi 1236 từ chính khi đọc dữ liệu từ nhật ký nhị phân

  2. Tạo chỉ mục trên dấu thời gian để tối ưu hóa truy vấn

  3. MySQL Cập nhật nhiều hàng trên một cột dựa trên các giá trị từ cùng một cột đó

  4. Cách kiểm tra trạng thái trình lập lịch sự kiện mysql

  5. Tính toán delta (chênh lệch của hàng hiện tại và hàng trước đó) trong sql