Bảo mật website5 phút đọc

Chặn thực thi PHP trong uploads WordPress đúng cách

Cách chặn thực thi PHP trong uploads trên Apache hoặc Nginx, kiểm thử upload hợp lệ và tránh dùng rule gây lỗi website.

Kỹ sư WebAnToan kiểm thử thư mục uploads chỉ nhận media và không thực thi PHP
Uploads cần cho phép ghi media nhưng thường không cần chuyển tệp PHP tới trình thông dịch.

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.

Đúng phạm vi

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.

Kiểm kê tệp và server
Chặn đúng tầng
Kiểm thử chức năng upload
Uploads cần cho phép ghi media nhưng thường không cần chuyển tệp PHP tới trình thông dịch.

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

  1. Upload ảnh và tài liệu hợp lệ, xác minh hiển thị bình thường.
  2. Trong staging, đặt một tệp thử vô hại với phần mở rộng bị chặn.
  3. Xác minh request không được chuyển tới PHP handler.
  4. Kiểm tra image resize, PDF, import/export và plugin liên quan.
  5. 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 ý.

Không dùng chmod 777 để sửa lỗi upload

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ụ.

Gửi tình trạng website →

Website vừa được phục hồi?

Xác minh sạch trước khi vận hành lại

Rà persistence, credential, quyền truy cập và các luồng kinh doanh trước khi đóng sự cố hoặc gỡ chế độ bảo trì.

← Tất cả bài viết

Tiếp tục theo chủ đề

Bài viết liên quan

Hỗ trợ kỹ thuật website

Gửi tình trạng website cần hỗ trợ

Gửi 3 thông tin dưới đây để kỹ thuật viên kiểm tra sơ bộ và liên hệ lại.

Chỉ cần gửi tên miền và lỗi đang thấy. Không nhập mật khẩu hay mã OTP.