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

Đầu vào của người dùng, làm sạch và vệ sinh trước khi gửi đến db

Đầu tiên, giữ cho văn bản logic và rõ ràng:

trim() -- OK
htmlentities($comment, ENT_NOQUOTES)  -- No; do later
mysqli_real_escape_string()  -- Yes; required by API
nl2br()  -- No; see below

Logic đằng sau những khuyến nghị đó:Dữ liệu trong cơ sở dữ liệu chỉ nên là dữ liệu thuần túy. Không phải htmlentities, không phải thẻ br. Tuy nhiên, bạn phải thực hiện Escape_string để chuyển dữ liệu từ PHP sang MySQL; những lần trốn thoát sẽ không được lưu trữ.

Nhưng ... Đó chỉ là bước giữa. Dữ liệu đến từ đâu? Các phiên bản PHP cũ hơn cố gắng "bảo vệ" bạn bằng cách thêm các phần mềm thoát và rác khác hoạt động tốt cho HTML, nhưng làm hỏng MySQL. Tắt tính năng thoát ma thuật như vậy và lấy dữ liệu thô.

Dữ liệu đi đến đâu? Có lẽ là HTML? Sau khi SELECTing dữ liệu trở lại bảng, sau đó trước tiên hãy làm htmlentities() và (tùy chọn) nl2br();

Lưu ý, nếu bạn muốn lưu giữ những thứ như <I> (chữ nghiêng), bạn đang yêu cầu rắc rối - rắc rối lớn. Tất cả những gì hacker cần làm là <script> ... để đưa tất cả các loại vi phạm vào trang web của bạn và có thể là toàn bộ hệ thống của bạ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. Bất kỳ hướng dẫn cơ sở dữ liệu quan hệ tốt nào?

  2. biến vòng lặp php while cho mọi div thứ ba

  3. Tôi nhận được nhiều select @@ session.tx_read_only, một cái có làm như vậy không?

  4. Cây đặt hàng trước MySql đã sửa đổi để tạo url

  5. Tại sao tôi cần thoát kép (sử dụng 4 \) để tìm dấu gạch chéo ngược (\) trong SQL thuần túy?