Можно конечно покрасивее:
1) В главном .htaccess прописать ВСЕ MIME типы разрешенных файлов
2) Проверять только последнее расширение.
---
Тогда возможно будет загружать файлы с двойным и более расширением.
НО!
Хостинг должен правильно поддерживать .htaccess, иначе возможна phpInjection уязвимость.
В Апаче 2.0 почему то ввели идиотскую функцию (в 1.х такого небыло), что если Апачу неизвестен тип файла из последнего расширения, он смотрит следующее.
---
К примеру,
1) ты разрешил выгружать фотошоповские файлы .psd
2) Апач ничего про них не знает, что за тип
3) если грузишь файл myfile.psd ничего страшного не произойдет.
4) Но вот хакер загружает шелл с именем myfile.phtml.psd и что произойдет?
Так, как последнее расширение .psd разрешено к выгрузке, файл благополучно будет залит на сервер.
А вот, если мы его вызовем не через загруз, а напрямую по ссылке my_site/forum/files/myfile.phtml.psd, то будет катастрофа.
Апач ничего не знает про расширение .psd и естессно будет рассматривать следующее. А оно у нас .phtml, а это уже исполняемый скрипт.
Что дальше произойдет - сам догадываешься ![]()