Tại sao phải giới hạn upload trong quản trị WordPress
Giả định khi một ai đó có ý đồ xấu đã đăng nhập vào quản trị website của bạn, và họ muốn có nhiều quyền kiềm kiểm soát hơn như: chỉnh sửa các file php, chèn quảng cáo trong các bài viết, kiểm soát dữ liệu trong database… việc đầu tiên họ làm là khai thác lỗ hổng từ thư viện upload. Để tải lên các file có mã độc. Chính vì vậy ta cần phải giới hạn một số file upload trong thư viện.
Cách giới hạn file upload
B1/ Bạn dán đoạn code sau vào file functions.php
add_filter( 'upload_mimes', 'tmdev_show_all_type_upload_in_media' ); function tmdev_show_all_type_upload_in_media( $mime_types ){ echo "<pre>"; var_dump( $mime_types ); echo "</pre>"; exit; }
Giải thích ý nghĩa:
Hàm var_dump( $mime_types )
: có tác dụng hiển thi các giá trị trong biến $mime_types
truyền vào.
Hàm exit
: có tác dụng dừng thực thi các lệnh đằng sau hàm var_dump
giúp ta có thể xem các giá trị của biến truyền vào trong hàm var_dump
này.
B2/ Bạn vào thư viện ảnh tải lên 1 ảnh bất kỳ. Thì website sẽ hiển thị ra tất cả các loại file mà website của bạn cho phép.
B3/ Kiểm tra và gỡ các file bạn không muốn upload lên website của bạn
Bạn kiểm tra các kết quả file upload cho phép ở B2 nếu có định dạng file php
thì bạn hãy gỡ định dạng upload cho phép này ra. Ngoài ra bạn cũng có thể gỡ các đinh dạng file khác.
Trong kết quả B2 mình không tìm thấy định dạng cho phép upload là php
nên mình không cần gỡ. Tuy nhiên giả sử mình muốn gỡ đinh dạng file “flv
” trong thư viện upload. Bạn hãy thêm đoạn mã sau trong file functions.php
add_filter( 'upload_mimes', 'tmdev_remove_type_upload_in_media' ); function tmdev_show_all_type_upload_in_media( $mime_types ){ unset( $mime_types['flv'] ); // hàm unset(): gỡ một giá trị trong 1 mảng trong php return $mime_types; }
Khi upload file có đuôi “flv” lên website bạn sẽ thấy xuất hiện cảnh báo lỗi, không cho phép upload file này lên
Tương cho các định dạng file upload khác, bạn chỉ cần gỡ bỏ key của array $mime_types là được, key được xác đinh là giá trị nằm trong dấu ngoặc [] khi xem hình ảnh B2 ở trên
vd: [“flv”] => key là flv
Mở rộng thêm định dạng file upload trong thư viện ảnh(media)
Giả sử mình muốn thêm định dạng file: pdf, svg, webp, xml
Bạn thêm đoạn code sau vào file functions.php
add_filter( 'upload_mimes', 'tmdev_show_add_news_type_upload_in_media', 99 ); function tmdev_show_add_news_type_upload_in_media( $mime_types ){ $mime_types['pdf'] = 'application/pdf'; // thêm định dạng file pdf $mime_types['svg'] = 'image/svg+xml'; // thêm định dạng file svg $mime_types['webp'] = 'image/webp'; // thêm định dạng file webp $mime_types['xml'] = 'text/xml'; // thêm định dạng file xml return $mime_types; }
Lưu ý
Sau khi kiểm tra các định dạng file upload trong website bạn phải xoá đoạn code ở B1 để website hoạt động bình thường vì trong đó có hàm exit; các lệnh sau hàm này sẽ không được thự thi.