Что лучше проверять mime тип файла или его расширение или все вместе?
Так как нельзя доверять любому вводу от пользователя, то по хорошему надо бы проверить не расширение и не mime (которые могут прийти любые), а собственно содержимое файла. Например - если вы ожидаете изображение jpeg - убедиться что у него есть соответствующие заголовки.
Почти всегда лучше проверять расширение, но если вдруг у вас проблемы с безопасность или самописный сервер/загрузчик/обработчик, то лучше проверять все вместе (через ленивую логику).