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

PHP Bộ ký tự mặc định cho pdo mysql là gì

Tùy chọn character_set_client là những gì MySQL sử dụng cho tập ký tự của các truy vấn và dữ liệu mà máy khách gửi.

Mặc định là utf8 trong MySQL 5.5, 5.6 và 5.7 và utf8mb4 trong 8.0.

Nó cũng có thể được thay đổi toàn cầu trong tệp tùy chọn my.cnf của bạn hoặc mỗi phiên bởi ĐẶT TÊN tuyên bố.

Thật tốt khi đặt tùy chọn rõ ràng khi bạn kết nối, vì vậy bạn không phải giả định giá trị mặc định của nó.

Nhận xét lại của bạn:

Tôi e rằng bạn đang nhầm lẫn giữa hai trường hợp SQL injection khác nhau. Có một rủi ro khi sử dụng năm bộ ký tự cụ thể đó, nhưng nó không liên quan đến việc đưa vào SQL bậc hai.

Rủi ro bộ ký tự là do một số bộ ký tự nhiều byte. Việc chèn một dấu gạch chéo ngược để thoát khỏi một ký tự trích dẫn theo nghĩa đen là điều thường thấy. Nhưng trong một số bộ ký tự, byte gạch chéo ngược được hợp nhất vào byte trước đó, tạo thành một ký tự nhiều byte. Điều đó khiến câu trích dẫn không bị thoát.

Việc chèn SQL bậc hai hoàn toàn khác. Nó có thể xảy ra với bất kỳ bộ ký tự nào. Đây là khi kẻ tấn công thêm dữ liệu vào cơ sở dữ liệu của bạn thông qua các phương tiện hợp pháp, chẳng hạn như điền vào biểu mẫu. Việc chèn dữ liệu được xử lý mà không có lỗi. Nhưng các giá trị mà chúng chèn chứa cú pháp được thiết kế để khai thác một số truy vấn SQL sau này.

Nó dựa vào việc các nhà phát triển tin rằng dữ liệu đã được lưu an toàn vào cơ sở dữ liệu của họ bằng cách nào đó "an toàn" để sử dụng mà không cần tham số hóa thích hợp.

Một ví dụ về chèn SQL bậc hai chỉ là ngẫu nhiên thay vì độc hại có thể là một người có họ "O'Reilly" và tên này được đọc bởi mã và được sử dụng trong một truy vấn tiếp theo.

$name = $db->query("SELECT last_name FROM people WHERE id = 123")->fetchColumn();
$sql = "SELECT * FROM accounts WHERE account_owner_last_name = '$name'";

Nếu tên chứa dấu nháy đơn theo nghĩa đen, nó sẽ làm rối truy vấn thứ hai trong ví dụ đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mySQL kiểm tra xem tên người dùng và mật khẩu có trong cơ sở dữ liệu không

  2. Có cách nào để tìm số vị trí thập phân lớn nhất trong Excel không

  3. MySQL - length () so với char_length ()

  4. MySql cấp quyền trên tất cả các cơ sở dữ liệu bắt đầu bằng <string>

  5. Tải nhiều tệp lên máy chủ với php không tải lên máy chủ tất cả các tệp