WordPress.org

Make WordPress Core

Ticket #17061: 17061.patch

File 17061.patch, 961 bytes (added by kurtpayne, 6 years ago)

Attempts to get MIME info and block non-image sideloads. Uses fileinfo extension, falls back to mime_content_type(), gracefully degrades to current behavior if nothing is available.

  • wp-admin/includes/media.php

     
    604604                        @unlink($file_array['tmp_name']);
    605605                        $file_array['tmp_name'] = '';
    606606                }
     607               
     608                // Get the mime type
     609                $mime_type = '';
     610                if ( extension_loaded('fileinfo') ) {
     611                        $finfo = new finfo();
     612                        $mime_type = $finfo->file( $file_array['tmp_name'], FILEINFO_MIME );
     613                } elseif ( function_exists('mime_content_type') ) {
     614                        $mime_type = mime_content_type( $file_array['tmp_name'] );
     615                }
     616                if ( !empty( $mime_type) ) {
     617                        $types = explode('/', $mime_type, 2);
     618                        if ( 'image' !== $types[0] ) {
     619                                // This is not an image
     620                                @unlink($file_array['tmp_name']);
     621                                $file_array['tmp_name'] = '';
     622                        }
     623                }
    607624
    608625                // do the validation and storage stuff
    609626                $id = media_handle_sideload( $file_array, $post_id, $desc );