Có một repo khá lạ của OpenAI vừa lên GitHub: openai/php2shell-checker. Tên repo ghi là “checker” nhưng README lại đặt tiêu đề “PHP Version Checker”. Đọc kỹ thì nó là công cụ dò xem một website hoặc một bản PHP local có nằm trong vùng nguy hiểm của lỗ hổng php2shell hay không. Viết bằng JavaScript, chạy bằng Node, không cần cài PHP để test.
Nó làm gì, và giải quyết chuyện gì
Vấn đề khá cụ thể: bạn có một site chạy PHP, bạn muốn biết bản PHP đang chạy có nằm ở mức vá an toàn hay không, mà không muốn SSH vào máy chủ, không muốn dựng môi trường, không muốn đọc phiên bản bằng tay từng chỗ. Công cụ này gom việc đó lại thành một lệnh.
Khi chạy với một URL, nó gửi request HEAD, đọc header X-Powered-By và Server để lấy phiên bản PHP. Nếu server trả 405 hoặc 501 cho HEAD, nó fallback sang GET. Khi chạy với --local, nó gọi php -v trên máy và đọc kết quả. Sau đó so phiên bản với một bảng cutoff nhúng sẵn trong tool, theo từng nhánh major/minor. Kết quả trả về một trong ba trạng thái:
OK(exit code 0): phiên bản patch ổn định, nằm trên cutoff của nhánh đó.VULNERABLE(exit code 1): phiên bản bằng hoặc thấp hơn cutoff của nhánh.UNKNOWN(exit code 3): không lấy được phiên bản, phiên bản không nhận dạng được, hoặc là bản prerelease mới hơn.
Tham số sai thì exit code 2. Có cờ --json để lấy output máy đọc được, trong đó trường patch_status nhận một trong ba giá trị ok, vulnerable, unknown. Cái này tiện cho việc gắn vào CI hoặc script quét hàng loạt.
Một điểm đáng ghi nhận: repo còn đóng gói sẵn hai “skill” cho Codex, một cái tên phpcheck-server cho ai có quyền truy cập server, một cái tên phpcheck-url cho ai chỉ có URL. Cách cài là nhờ Codex kéo từ chính repo này, không phải qua npm hay pip.
Vì sao nó được chú ý
Con số 637 sao không phải khủng, nhưng với một repo tạo ngày 2026-10-21 và cập nhật đúng ngày đó, tức là mới tinh, thì tốc độ đó đáng để nhìn. Lý do khá rõ: nó đến từ tài khoản OpenAI, mà OpenAI thì hiếm khi đẩy lên một repo nhỏ kiểu utility thế này. Cộng thêm việc nó gắn với một lỗ hổng có tên riêng (php2shell), nên nhu cầu kiểm tra hàng loạt site PHP tăng vọt trong thời điểm đó.
Điểm khác biệt so với mấy tool scan bảo mật thông thường: nó không cố gắng khai thác gì cả, không gửi payload, không đọc body response. Nó chỉ đọc header và so số phiên bản. Nghĩa là chạy nó trên site của người khác về mặt kỹ thuật chỉ là một request HEAD bình thường, nhẹ và nhanh. Đổi lại, nó cũng không phát hiện được gì nếu header bị ẩn.
Một chi tiết nữa khiến dev để ý: repo có cả hướng dẫn cài “skill” cho Codex ngay trong README. Đây là kiểu đóng gói mới đang xuất hiện, tool CLI đi kèm skill cho agent, không chỉ là một file script đơn lẻ.
Cài và chạy thử
Không có bước cài qua package manager. Cách nhanh nhất là clone repo rồi chạy trực tiếp bằng Node:
node phpcheck.js "https://example.com"
Kiểm tra bản PHP CLI trên máy local:
node phpcheck.js --local
Lấy output JSON để đưa vào script khác:
node phpcheck.js "https://example.com" --json
Nếu bạn dùng Codex và muốn cài cả hai skill, README ghi đúng câu lệnh này:
$skill-installer install both skills from https://github.com/openai/php2shell-checker
Sau đó gọi skill theo ngữ cảnh. Khi có quyền truy cập server:
$phpcheck-server check the PHP version serving my site
Khi chỉ có URL:
$phpcheck-url check https://example.com
Chạy test cũng nhẹ, không cần PHP thật hay site bên ngoài, test dựng HTTP server local và một file PHP giả:
node --test phpcheck.test.js
Ai nên dùng, dùng trong tình huống nào
Dev đang vận hành vài site WordPress hoặc app PHP tự viết, muốn kiểm tra nhanh một loạt domain xem bản nào còn nằm dưới cutoff. Chạy một vòng node phpcheck.js với danh sách URL, đọc exit code, lọc ra những cái trả về 1 là xong. Không cần login vào từng VPS.
Team DevOps muốn gắn bước check vào pipeline. Dùng --json rồi parse patch_status, fail build nếu ra vulnerable. Với exit code đã được quy ước rõ (0, 1, 2, 3), việc viết shell script bọc ngoài khá đơn giản.
Người làm security assessment ở giai đoạn đầu, muốn có một pass nhanh trước khi dùng tool nặng hơn. Công cụ này không thay thế scanner đầy đủ, nhưng nó cho biết ngay nên đào sâu vào host nào.
Cuối cùng là dev cá nhân có một con VPS chạy PHP, thỉnh thoảng gõ node phpcheck.js --local sau khi update hệ thống để xác nhận phiên bản đã nhảy qua ngưỡng an toàn.
Ưu điểm và hạn chế, đọc kỹ phần này
Ưu điểm dễ thấy: chạy bằng Node, không cần cài PHP, không dependency nặng, test có sẵn, output có cả dạng người đọc và máy đọc. Mã nguồn ngắn, đọc được trong một buổi. License Apache-2.0, thoải mái dùng trong doanh nghiệp, miễn giữ thông báo bản quyền và tuân thủ điều khoản patent của Apache 2.0.
Hạn chế thì chính README nói rõ, và nên đọc nguyên văn. Tool chỉ đánh giá phiên bản lộ ra qua header HTTP hoặc qua php -v. Nó không follow redirect, không đọc body response. Header ẩn hoặc bị sửa thì trả UNKNOWN.
Quan trọng nhất: OK chỉ là so sánh số phiên bản, dựa trên giả định rằng các bản patch ổn định sau đó trong cùng nhánh đã chứa bản vá. Nó không tự xác minh bản vá bảo mật có thực sự được áp dụng. Các bản distro backport có thể không đổi số phiên bản upstream, nên kết quả có thể lệch so với thực tế. Và câu này trong README nên dán lên tường: UNKNOWN không có nghĩa là target đã được vá.
Về độ trưởng thành: repo mới tạo và cập nhật cùng một ngày, chưa có topics, chưa có lịch sử commit dài. Đừng kỳ vọng tài liệu sâu hay một cộng đồng đông. README đủ dùng cho việc chạy tool, còn lại phải đọc code. Thêm nữa, OpenAI ghi rõ họ không nhận đóng góp code từ bên ngoài, chỉ nhận bug report và feedback không phải code qua GitHub issues. Nếu bạn định fork rồi mở PR, đọc CONTRIBUTING.md trước cho khỏi mất công.
Một điểm cần cân nhắc khi dùng cho mục đích báo cáo: vì tool chỉ dựa vào header, kết quả OK không đủ để khẳng định “site này an toàn”. Nó chỉ nói “phiên bản lộ ra nằm trên cutoff”. Hai chuyện khác nhau. Nếu viết báo cáo bảo mật, đừng trích dẫn OK như một chứng nhận.
Tôi thấy công cụ này đúng chỗ nhất khi dùng như một bước lọc nhanh hàng loạt, chứ không phải kết luận cuối cùng. Với 637 sao trong ngày đầu và xuất phát từ một tài khoản lớn, khả năng nó được fork và mở rộng bởi cộng đồng là có, nhưng hiện tại hãy đối xử với nó như một script tiện tay: đọc code, chạy thử, hiểu giới hạn rồi mới đưa vào quy trình. Repo ở đây: openai/php2shell-checker.
