Безопасно качване на файлове в сайта
Колко дискусии имаше на Хабре за опасността от качване на файлове, възможни уязвимости при качване на файлове и т.н. Реших също да се опитам да ви помогна, скъпи читатели, по този въпрос.
Както всички вече добре знаете, най-надеждният начин за защита при качване на файлове е:
1. Преименувайте файловете на имена на файлове и разширения, независимо от името на входния файл. 2. Деактивирайте изпълнението на скрипт в папката, където се качват файловете.
Ще разгледаме ситуация, когато трябва да направите безопасно качване на файлове, без да използвате база данни, със запазени оригинални имена и с възможност за качване на всичко (без никакви ограничения) с последваща възможност за изтегляне на тези файлове по URL. За по-добро възприятие, сега нека внедрим примитивна услуга за хостване на файлове. За да направим това, имаме нужда от: папка, нека я наречем например „файлове“, и 2 скрипта „upload.php“ и „get.php“.
В скрипта "upload.php"реализираме качване на файла с преобразуване на името в шестнадесетичен код. Тези. например, ако потребителят реши да качи файла „index.php“, тогава той обикновено ще бъде качен в папката, но с името „696e6465782e706870“, което е напълно безопасно за сървъра и няма да бъде изпълнено от PHP манипулатора.
Ето скрипта "upload.php":
Сега нека да разгледаме папката, в която ще отидат файловете. Първо, нека му дадем разрешения 777 и да създадем файл".htaccess"в него:
В действителност в папката „файлове“ ще има файлове с имена: