Есть часть как и когда / где. Как это довольно просто, поскольку бинарные файлы содержат заголовок, а заголовок довольно легко удалить и проверить. Для файлов Windows вы можете проверить статью Формат заголовка исполняемого файла . Аналогичные форматы используются для других двоичных типов, поэтому вы можете определить, какие типы вы разрешаете, а какие нет.
ПРИМЕЧАНИЕ. Связанная статья предназначена для полного запроса файла. Есть дешевые, простые и грязные ярлыки, где вы проверяете только несколько байтов.
Когда и где зависит от того, как вы получаете файлы. Если вы используете высоко абстрагированную методологию (загружаемую библиотеку), что вполне нормально, вам может потребоваться передать весь файл перед тем, как вы начнете запрашивать биты. Потоковая передача в память или сохранение и удаление зависит от вашей кодировки и, возможно, даже от библиотеки. Если вы управляете потоковой передачей вверх, у вас есть возможность выполнять потоковую передачу в первых байтах (часть заголовка) и прерывать процесс в середине потока.