Q:

Загрузка изображений. Безопасность

Заголовок Content-Type можно подменить, getimagesize() тоже доверять нет смысла, так как файл может быть в формате GIF, JPEG, JPG, PNG, но и в тоже время php-скриптом, проверять расширение файла тоже нет смысла, т.к уже было сказано, что изображение может быть php-скриптом.
Интересуют все дельные советы по обеспечению безопасной загрузки изображений.

A:

Apache отдает файлы с MIME-типом, определяемым по расширению. Поэтому если вы сами определяете расширение файла и не используете его где-то кроме тегов img и стилевых файлов, то вашему серверу ничего не грозит. Ваши клиенты в теории все еще могут пострадать от эксплойтов в браузерах, но это уже не ваша головная боль.
Ну и, разумеется, никогда не выполняйте include или require с пользовательскими данными.

A:

Первое: непонятно, где, по-вашему, вообще происходит какая-то проблема с безопасностью. Второе:

getimagesize() тоже доверять нет смысла, так как файл может быть в формате GIF, JPEG, JPG, PNG

Если файл действительно в формате GIF, JPEG, JPG, PNG, и getimagesize возвращает его пропорции, то, значит, это настоящий файл в формате GIF, JPEG, JPG, PNG. Может, коненчо, это рарджипег, но вы же не собираетесь исполнять его как PHP-скрипт?
Третье и последнее. Ну, загрузили вам скрипт с расширением .gif. Где в этом случае рушится безопасность? У вас сервер скармливает файлы с раширением .gif PHP-интерпретатору? Единственная проблема, которая здесь может быть - это проблема с cgi.fix_pathinfo в php-fpm, и пока вы живете на хостинге, этим должен заниматься хостер (и то это очень древний баг, который, вроде бы, пофиксили).
Пока вы работаете с файлом, как с изображением, и не выставляете в публичный доступ файлы, которые подпадают под правило "скормить интерпретатору" (т.е. файлы с расширением .php), ничего не произойдет.

