Уже потому, что Вы так и не исправили ошибки.
Все что угодно.
$_FILES['filename']['type'] создается не на сервере, эта переменная просто берется из заголовков посылаемых пользователем при загрузке файла.
Вы действительно считаете что на информацию посылаемую пользователем в отношении типа файла можно полагаться?
Так как Вы написали - код работать не будет в принципе, поэтому "нет, не так как Вы написали".
Может Вы всё-таки скажите фильтр на что Вам необходимо добавить к Вашему скрипту? Фильтров разных может быть много...
Мы посмотрели внимательно. Просто Вы не поняли о чем мы сказали.
Если Ваша задача в том что бы любой файл загрузить на сервер и положить его на сервер, то никаких "дыр" в Вашем скрипте быть не может, скрипт будет исправно загружать файлы на сервер и класть их на сервер.
Если Вас беспокоило что загрузят какие-нибудь скрипты или загрузят файлов на 1Гб или еще что-нибудь, то Вам следовало упомянуть об этом... и спросить как избежать этого. А в текущей задаче (читайте своё первое сообщение) Вы не говорите о том, что загрузка скриптов или больших файлов или еще что-нибудь Вас беспокоит, а скрипты для загрузки файлов используют с совершенно разными целями.
Грубейшая ошибка. Эта переменная совершенно не обязательно будет содержать тип файла, на нее нельзя полагаться. Это просто заголовок посылаемый клиентом.
По разрешению...
Не empry, а empty... не tpm_name, а tmp_name.. не copy, а move_uploaded_file.
Никакой уязвимости в таком скрипте нет и не может быть по определению... ибо Вы не сказали о каких-либо ограничениях.
Уязвимость (по определению) это когда скрипт делает что-то, что непредусмотрено создателем. Этот Ваш скрипт ничего такого делать не может.
caravan... имхо последний оплот приличного хостинга.
Капча там достаточно убогая, если не сменят - люди приспособят новый софт.
Через обработку ошибок (404) плохо невозможностью реализовать нормально POST запросы и забиванием логов сервера ошибками.... которые не ошибки:)
Наверное нас будут пинать, но все-таки скажем.
php это не более язык программирования, то есть способ изложения того, что Вы уже знаете/думаете. Не зная самого программирования - хороший код написать практически нереально.
Если проводить аналогию, безусловно имея бетонные плиты и кирпичи и насмотревшись на примеры других зданий (особенно однобоко и со стороны) - построить здание можно, но какого качества оно будет? Сколько важных вещей... не говоря уже о нюансах Вы упустите?
Начните лучше с "азбуки" - с самих книжек по программированию, по алгоритмам, по прикладной математике, основ программирования приложений для пользователя - заложите себе основу. А потом уже есть смысл переходить к самому языку.
Хорошие книги по php (видимо как раз на них Вы и натыкались так или иначе) рассчитаны именно на знакомых с программированием, поэтому "для чайников" и нету практически.
К сожалению навскидку книг по программированию начальных не назовем:( Но все-таки порекомендуем искать именно их.
+1 к Зингельшухер, dkameleon :)
Все "дыры" в веб-приложениях происходят не потому что нет защиты, а потому что программист совершил ошибку. Поэтому каждый раз когда идет речь о "защите" сайта мы несколько настораживаемся, ибо код без ошибок защищать не надо и при прочих равных лучше потратить время на исправление ошибок, а не надстройку "защиты"
И типичный пример этого вот....
Модное распространенное заблуждение, ибо если Вашему коду необходимо register_globals off для "защиты", то это "плохой, негодный код"...
Прямая аналогия не совсем уместна. Если ларечник берет на продажу вещи у оптовиков, то в се наоборот, оптовики берут на продажу ссылки у ларечников.
... и логичное продолжение этой мысли это сделать весь форум платным, с месячной оплатой допустим в 1000уе (а это мелочь ведь для серьезного оптимизатора - кроме шуток), а регистрацию только по рекомендациям (что бы новички не мешали). Тогда точно лишние люди тут мешать не будут и будет ляпота.
А если мы не курим?:)
P.S.: Да, кстати, лично мы бы намного более спокойно отдали бы те же 20уе в качестве donation...