Что за предрассудки касаемо PHP? Ну реально, аж задело как-то даже. Если криворукая школота клепает на нем сайтики игровых кланов, которые через пять минут взламывают их такие же криворукие обиженные дружки - стоит ли винить в этом PHP? Всякие музыкальные файлопомойки же позволяют грузить файлы всем и вся, никто же их не ломает. Они же на С++ же написаны.
Если "очень долго ковырялись с темой безопасности" - то каким образом, на каких ресурсах, какие доводы они приводили, почему нет, и т. д. Это очень серьезная тема, тут не должно быть диванных теорий и домыслов, нужны факты и ссылки на авторитетные источники (если они утверждают что это невозможно).
Предварительно проверяйте все по банальному разрешению, просто берете его из имени файла и через in_array () проверяете наличие в массиве предварительно разрешенных для загрузки на сервер. Из пути вырезаете все спец. символы, в том числе .. обязательно, чтобы было нельзя пройти на уровень выше и не загружать и потом скачивать ваши же файлы. С изображениями вообще красота: с помощью дефолтной GD'шной imageCreateFromJPEG () создаете объект. Если создать она не смогла - выкидывайте ошибку. Если совсем паранойя - можете после этого получить через imagesX ее ширину, если не смогла - то выкидываете ошибку. При ошибке временный файл просто удаляем. Теперь фишка в том, как будет невозможно получить готовый файл еще в процессе его проверки на сервере, так как его нужно для этого загрузить: добавляете рандомную строку к концу файла и кидаете его в рандомно сгенерированную папку, и даже если злоумышленник сможет узнать директорию куда грузятся ваши файлы и даже получит к ней доступ - он не сможет узнать имя своего файла для его запуска. Полные пути к файлам храним в БД. Если файлы загружены - наверное предполагается, что их будут скачивать. Отдавайте их через простенький скрипт на PHP, с прописанными в нем заголовками типов файлов и размером, он будет делать запрос в БД по id этого файла, получать полный путь к нему и отдавать его браузеру на закачку, при этом ни юзеры, ни даже вы сами не будете знать имя скачиваемого файла. Качается и качается, не все ли равно что? C остальными файлами все то же самое, с текстовыми еще проще: если они имеют расширение .txt - их браузер чисто физически не сможет выполнить. Только напрямую не отдавайте, не выворачивайте пути, отдавайте через скачку. Вот и все. Просто и эффективно.