Plugin Check: Kiểm Tra Bảo Mật Plugin WordPress Từ A Đến Z Bằng WP-CLI

Màn hình terminal đang chạy Plugin Check kiểm tra bảo mật plugin WordPress
Câu trả lời nhanh
Plugin Check (PCP) là công cụ chính thức của Plugins Team WordPress, hiện đã được wordpress.org chạy tự động cho mọi lần cập nhật plugin. Bài viết hướng dẫn cài đặt và chạy PCP bằng WP-CLI, đọc báo cáo, sửa các lỗi phổ biến như thiếu escaping output hay gọi file trực tiếp, cùng cách tích hợp PCP vào CI để chặn lỗi bảo mật ngay từ máy dev.

Nếu bạn đang phát triển plugin cho khách hàng hoặc đã có plugin trên wordpress.org, chắc hẳn bạn từng nghe đến Plugin Check (PCP) — công cụ chính thức của Plugins Team dùng để rà soát bảo mật, tương thích và tuân thủ chuẩn trước khi plugin được duyệt. Điều đáng chú ý là wordpress.org hiện đã chạy Plugin Check tự động cho tất cả cập nhật plugin, cả plugin mới lẫn plugin cũ đã duyệt, chứ không chỉ lúc nộp mới nữa.

Trong bài này, mình sẽ hướng dẫn bạn cài đặt và chạy Plugin Check ngay trên máy local bằng WP-CLI, đọc báo cáo kết quả và sửa các lỗi phổ biến nhất. Tất cả làm được trong một buổi chiều, không cần công cụ trả phí nào cả.

Plugin Check là gì và vì sao bạn nên quan tâm ngay từ bây giờ?

Kiểm tra bảo mật plugin WordPress bằng Plugin Check (PCP)
Kiểm tra bảo mật plugin WordPress bằng Plugin Check (PCP)

Plugin Check là plugin chính thức do Plugins Team, Performance Team và Meta Team phối hợp phát triển. Nó chạy một loạt kiểm tra tự động trên mã nguồn plugin của bạn — từ lỗi bảo mật cơ bản như thiếu escape output, gọi trực tiếp file, cho đến vấn đề tương thích chuẩn coding của WordPress. Kết quả là một báo cáo chi tiết kèm hướng dẫn cách sửa từng lỗi. Vì wordpress.org đã đưa PCP vào quy trình duyệt tự động cho mọi lần update plugin, nếu bạn fix lỗi trước khi submit thì quá trình duyệt sẽ nhanh hơn hẳn và giảm rủi ro bị đội review yêu cầu chỉnh sửa qua lại.

Cài đặt Plugin Check trên môi trường phát triển như thế nào?

Mình luôn khuyên chạy PCP trên môi trường local hoặc staging, đừng chạy trên site production đang sống. Cách cài đơn giản nhất là qua WP-CLI, chỉ hai lệnh:

cd /duong-dan/website
wp plugin install --activate plugin-check

Sau khi kích hoạt, bạn sẽ thấy mục mới Tools → Plugin Check trong wp-admin. Tại đây chọn plugin cần kiểm tra từ dropdown, chọn các nhóm check (mình thường để mặc định cả plugin repo checks và security checks), rồi bấm Check it!.

Nếu bạn thích làm mọi thứ bằng dòng lệnh như mình, WP-CLI cũng có lệnh tương ứng:

wp plugin check hello.php

Lệnh này chạy toàn bộ check mặc định và in kết quả thẳng ra terminal. Muốn xuất báo cáo dạng CSV để lưu lại hoặc gửi cho team, chỉ cần thêm flag:

wp plugin check hello.php --format=csv > pcp-report.csv

Rất tiện khi bạn muốn đưa báo cáo vào pull request để cả team cùng xem.

Những lỗi nào PCP hay bắt nhất và cách sửa ra sao?

Sau khi chạy PCP cho hàng chục plugin khách hàng của mình, ba nhóm lỗi xuất hiện nhiều nhất luôn là: thiếu escaping khi xuất dữ liệu, gọi file trực tiếp, và dùng hàm PHP bị deprecated. Cụ thể cách xử lý từng nhóm như sau.

Thiếu escaping output. PCP sẽ báo WordPress.Security.EscapeOutput mỗi khi bạn echo biến ra HTML mà không qua esc_html(), esc_attr() hay esc_url(). Đây là lỗi tưởng nhỏ nhưng là cánh cửa cho XSS. Sửa rất nhanh:

// Sai — PCP sẽ báo lỗi
echo $setting['label'];

// Đúng
echo esc_html( $setting['label'] );

Gọi file plugin trực tiếp. Nếu file PHP chính của plugin thiếu dòng kiểm tra ABSPATH, người ngoài có thể truy cập thẳng file đó qua URL và chạy code tùy ý. Thêm đoạn này lên đầu mọi file PHP của plugin:

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Chặn truy cập trực tiếp.
}

Dùng hàm, hằng đã lỗi thời. PCP dựa trên PHPCompatibilityWP nên sẽ bắt được cả những hàm PHP đã bị loại ở phiên bản mới. Thay create_function() bằng closure, thay ereg* bằng preg_match() — vừa pass check, vừa sẵn sàng cho PHP 8.x mà hosting hiện nay đều đang chạy.

Cách đưa Plugin Check vào quy trình làm việc hàng ngày?

Mình không chờ đến lúc submit mới chạy PCP. Cách làm mà mình thấy hiệu quả nhất là chạy PCP tự động trước mỗi lần commit quan trọng, giống như kiểu guardrails mình từng chia sẻ trong bài về thiết lập chuẩn code cho dự án WordPress. Bạn có thể thêm một bước vào script deploy hoặc CI pipeline:

# Chạy PCP, fail nếu có lỗi ERROR
wp plugin check my-plugin/my-plugin.php --severity=error || exit 1

Nhờ vậy, mọi lỗi nghiêm trọng bị chặn ngay tại máy dev chứ không bao giờ kịp lên production hay tới tay reviewer của wordpress.org. Với plugin đang bán cho khách, đây là cách rẻ nhất để giữ chất lượng code ổn định về lâu dài.

Ngoài ra, sau mỗi bản cập nhật lớn của Gutenberg hoặc WordPress core — ví dụ như chuỗi thay đổi gần đây mà mình tổng kết trong bài về Gutenberg 23.8 và 23.9 — chạy lại PCP một lần cũng đáng, vì các rule được cập nhật liên tục theo chuẩn mới của core.

Kết luận: chạy một lần hôm nay, đỡ sửa mười lần sau này

Plugin Check miễn phí, chính thức, và giờ đây là một phần của quy trình duyệt plugin trên wordpress.org. Việc chủ động chạy PCP ngay trên máy local giúp bạn phát hiện lỗi bảo mật sớm, rút ngắn thời gian duyệt plugin và giữ mã nguồn sạch theo chuẩn cộng đồng. Mình đề nghị bạn dành 30 phút hôm nay: cài plugin check, chạy cho plugin đang phát triển, và fix hết các lỗi mức ERROR trước tiên. Sau đó thêm nó vào CI để không bao giờ phải nhớ chạy thủ công nữa. Một công việc nhỏ nhưng lợi ích kéo dài hàng năm.

Thanh Tùng

Mình là Thanh Tùng. Bạn bè gọi mình là "bác sĩ máy tính" vì hễ máy nào có vấn đề là mình muốn mò vào xem sao. Mình viết hướng dẫn theo cách mà mình mong người khác đã viết cho mình ngày xưa — từng bước rõ ràng, không bỏ sót, và nói luôn cái gì hay bị lỗi. Ngoài giờ làm mình chơi guitar, nuôi mèo, và có một con VPS riêng dành riêng cho việc cài thử đủ thứ linh tinh.

Xem tất cả bài viế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 *