Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Phòng tránh SQL Injection khi sử dụng $wpdb trong WordPress - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

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.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *