Phương pháp SQL Injection là cách sử dụng các đoạn mã SQL không hợp lệ để xâm nhập và trích xuất thông tin trái phép từ cơ sở dữ liệu. Điều này cũng áp dụng cho WordPress vì nó sử dụng MySQL làm hệ quản trị cơ sở dữ liệu. Vậy làm thế nào để bảo vệ WordPress khỏi SQL Injection? Chúng ta có thể thực hiện điều này bằng cách sử dụng đối tượng $wpdb trong WordPress để thực hiện các truy vấn xuống cơ sở dữ liệu một cách an toàn.
Bài viết này cung cấp các giải pháp để xử lý các ký tự đặc biệt được input vào câu query làm sai cú pháp của câu query.
VD: Bạn có đoạn code sau:
global $wpdb; $email = "admin@vina'support.com"; $user = $wpdb->get_row("SELECT * FROM wp_users WHERE user_email = '$email' ");
Bạn sẽ gặp lỗi sau:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
Nguyên nhân chính xuất phát từ việc tồn tại một dấu nháy đơn bên trong nội dung biến $email. Nếu như biến này chứa một đoạn mã độc hại, có thể được sử dụng để tấn công và khai thác trái phép, dẫn đến nguy cơ rò rỉ dữ liệu. Vì vậy, để đảm bảo an toàn, chúng ta cần phải kiểm soát kỹ lưỡng dữ liệu đầu vào. Trong bài viết này, chúng tôi sẽ giới thiệu hai cách để xử lý dữ liệu đầu vào khi sử dụng $wpdb để đảm bảo tính bảo mật của ứng dụng.
Cách 1: Sử dụng $wpdb->prepare để làm sạch câu query
$user = $wpdb->get_row($wpdb->prepare( "SELECT * FROM wp_users WHERE user_email = %s " ), [$email]);
Cách 2: Sử dụng esc_sql() để escape các ký tự đặc biệt
$email = esc_sql("admin@vina'support.com"); $user = $wpdb->get_row("SELECT * FROM wp_users WHERE user_email = '$email' ");
Hơn nữa, có nhiều phương pháp đôi ứng khác, tuy nhiên, trong bài viết này, chúng tôi chỉ sẽ đề cập đến hai phương pháp đôi ứng đơn giản và phổ biến nhất.