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.

Bài viết liên quan

post-no-image

Chia sẻ một số thư viện loading css đẹp

giai-phap-chinh-css-khong-bi-luu-cache-trinh-duyet

Giải pháp tốt khi chỉnh sửa css mà không sợ bị lưu cache trình duyệt

post-no-image

Một số css tùy biến thẻ input type: select, number

post-no-image

Tắt lazyload cho một số hình ảnh

post-no-image

Tuỳ biến layout YITH WooCommerce Wishlist

post-no-image

Một số hook hoặc filter thường sử dụng trong plugin WPML