Thư mục wp-content/uploads cần cho phép WordPress ghi ảnh và tài liệu, nhưng phần lớn website không cần thực thi PHP tại đây. Chặn thực thi phía máy chủ giúp giảm khả năng một tệp upload độc trở thành web shell. Cấu hình phải đúng loại web server và được kiểm thử trên staging.
Chặn PHP trong uploads không ngăn mọi kiểu mã độc, không thay thế kiểm tra loại tệp và không nên áp dụng mù cho toàn bộ wp-content vì plugin có thể cần endpoint hợp lệ.
Kiểm kê trước khi chặn
Tìm PHP, phtml và tệp có đuôi kép trong uploads; xác định tệp nào là mã độc, tệp nào do plugin hợp lệ tạo. Lưu snapshot và đối chiếu access log. Nếu đã có file thực thi lạ, cần điều tra điểm upload hoặc credential bị lộ trước khi chỉ thêm rule.
Với Apache và .htaccess
Cấu hình cụ thể phụ thuộc Apache version và cách PHP handler được khai báo. Có thể dùng rule từ chối truy cập các phần mở rộng thực thi trong thư mục uploads, nhưng phải đặt đúng file và kiểm tra server có cho phép override hay không. Rule sai có thể bị bỏ qua hoặc gây 500.
Với Nginx
Nginx không đọc .htaccess. Cần chỉnh server block để location PHP không khớp tệp nằm dưới uploads, sau đó kiểm tra cấu hình và reload an toàn. Nếu dùng hosting quản lý, yêu cầu nhà cung cấp thực hiện thay vì chỉnh file không được quản lý.
Kiểm tra sau cấu hình
- Upload ảnh và tài liệu hợp lệ, xác minh hiển thị bình thường.
- Trong staging, đặt một tệp thử vô hại với phần mở rộng bị chặn.
- Xác minh request không được chuyển tới PHP handler.
- Kiểm tra image resize, PDF, import/export và plugin liên quan.
- Theo dõi log 403/404/5xx sau phát hành.
Ngăn từ lớp upload
Kiểm tra MIME/type, quyền người dùng, kích thước, đổi tên và lưu trữ tách biệt khi phù hợp. Không tin riêng phần mở rộng do trình duyệt gửi. Plugin upload tùy biến phải dùng API WordPress, nonce và capability đúng, đồng thời không cho phép người dùng chọn đường dẫn tùy ý.
Lỗi ghi thường liên quan owner, user chạy PHP hoặc cấu hình storage. Mở quyền toàn bộ tạo bề mặt ghi không cần thiết và che giấu nguyên nhân thật.
Nguồn tham khảo chính thức
Tài liệu Hardening WordPress khuyến nghị hạn chế quyền ghi và containment. Khi áp dụng rule, cần đối chiếu tài liệu chính thức của web server/hosting đang sử dụng.
Thư mục ảnh trở thành nơi giấu mã độc như thế nào?
uploads vốn cần quyền ghi để nhận media nên thường rộng hơn core và plugin. Attacker lợi dụng upload không kiểm tra, lỗ hổng plugin hoặc quyền file sai để đặt PHP có đuôi kép, tên giống ảnh hoặc nằm sâu trong thư mục theo năm tháng.
Chủ website nhìn thấy hàng nghìn ảnh và khó nhận ra một file lạ vài kilobyte. Nếu web server vẫn thực thi PHP tại đây, chỉ một request là đủ gọi webshell mà không cần đi qua WordPress.
Chặn thực thi nhưng không phá chức năng media
Rule phải phù hợp Apache, Nginx và kiến trúc hosting. Sau khi cấu hình, thử tải ảnh, tạo thumbnail, xử lý PDF và các plugin thật sự cần file động. Không dùng một snippet trên mạng rồi cho rằng đã xong; cấu hình đặt sai tầng có thể không được áp dụng.
Khi phát hiện PHP trong uploads
Đừng xóa hàng loạt ngay. Lưu hash, timestamp, owner và nội dung mẫu; tìm request tạo file, user liên quan và các bản sao cùng pattern. Kiểm tra cron, database và thư mục tạm vì file trong uploads có thể chỉ là payload được persistence tạo lại.
Mục tiêu không chỉ là làm uploads “không chạy PHP”, mà còn phải biết mã đã vào bằng cách nào và liệu dữ liệu khách tải lên có bị truy cập hay không.
Upload là luồng dữ liệu không tin cậy
Kiểm tra MIME thực, phần mở rộng, kích thước, quyền truy cập và nơi lưu; đổi tên file phía server khi phù hợp. Với tài liệu riêng tư, không dựa vào URL khó đoán mà cần kiểm soát quyền tải.
Rà các plugin tạo file
Form, import, backup và media optimizer có thể ghi vào uploads. Lập danh sách để rule chặn thực thi không phá chức năng và để biết process nào có quyền tạo file.
Cụm gia cố WordPress sau phục hồi
Hoàn thiện cấu hình, quyền, danh tính và lớp phòng thủ theo một lộ trình có kiểm thử.
Câu hỏi thường gặp
Chặn PHP trong uploads có làm hỏng ảnh không?
Không nếu rule đúng, nhưng vẫn phải kiểm thử image resize, tài liệu và plugin upload liên quan.
.htaccess có tác dụng trên Nginx không?
Không. Nginx cần cấu hình server/location riêng hoặc hỗ trợ từ nhà cung cấp hosting.
Chặn PHP trong uploads có đủ để ngăn mã độc không?
Không. Vẫn cần vá plugin, kiểm tra loại tệp, quyền upload và rà các vị trí khác.
Cần rà cấu hình bảo mật theo website thực tế?
WebAnToan có thể kiểm tra cấu hình, quyền, tài khoản và lớp phòng thủ mà không làm gián đoạn nghiệp vụ.



