Качване на файлове на сървъра Използване на PHP

В последната статия ти казах за механизма на качване на файлове на сървъра, като използва PHP. В тази статия, аз просто отвори себе си, а не на процеса на зареждане, свързани с въпросите на сигурността.

Често изтегляне на файлове без необходимите проверки за сигурност, води до уязвимости, които на практика са се превърнали в истински проблем в уеб приложения, PHP.

Ето защо, в тази статия ще се опитам да опиша основните уязвимостта на уеб приложения за изтегляне на файлове на сървъра, и как да ги избегнем.

Да започваме. Първото нещо, което идва на ум на всеки разработчик е проверка Content-Type файл. С други думи - да позволява сваляне на файлове строго дефиниран тип. Нека да разгледаме кода:

Ако стандартен потребител се опитва да изтегли всеки друг файл, но GIF изображение, той ще бъде предупреден! Но нападателя няма да използвате уеб формуляра на сайта си.

Той може да напише кратко Perl скрипт (може би на всеки език). което ще подражава на действията на потребителя за сваляне на файлове. За да промените данните се изпращат до usmotrenie.Tak как да проверите MIME-тип идва заедно с искането, нищо не пречи на някой хакер да го инсталирате в «изображение / GIF», защото с клиент емулация, той има желание пълен контрол, който се изпраща.

getimagesize () функция ще определи GIF размер, JPG, PNG, SWF, PSD, TIFF, BMP или файл и връща размера, вида на файла и ширина текстов низ височина / да се използва вътре в нормален HTML тагове IMG.

Нека да видим как можем да използваме това в нашия скрипт:

Може да си мислите, че сега можем да бъдете сигурни, че само GIF или JPEG файл, за да бъде зареден. За съжаление, това не е така. Файлът може да бъде наистина в GIF или JPEG формат, и в същото време, PHP-скрипт. Повечето графични формати ви позволява да добавите текст в метаданните на изображението. Възможно да се създаде напълно правилен образ, който съдържа някои PHP код в метаданните. Когато getimagesize () изглежда най-файла, той ще го приема като валиден GIF или JPEG. Когато PHP компилатор гледа делото, тя вижда изпълним PHP код в двоичен "боклук", който ще бъде игнориран.

Може да попитате, защо не проверите файлово разширение? Ако ние не позволяваме качвате файлове в * .php. сървърът никога няма да бъде в състояние да изпълнят този файл е скрипт. Нека да разгледаме един подход.

Можете да създадете бял списък с разширения и проверете името на изтегления файл, за да съответства на белия списък.

Изразяване! Preg_match ( "/ $ т \ $ / аз", $ _FILES [ 'uploadFile'] [ 'име']) проверява името на файла, зададен от потребителя в масив от бял списък. Определението «аз», казва нашият израз нечувствително. Ако разширението на файла съответства на един от елементите в белия списък, файлът ще се зареди, в противен случай програмата ще генерира грешка!

Както можете да видите на доверие и разширяване на Content-Type не можете да подадете. Поради това е необходимо в директорията, където сте изтеглили файловете, за да добавите всичките си .htaccess файл, който предписва в следните направления:

Тези редове в .htaccess да причинят на сървъра не да изпълнява PHP и др файлове, както и показване на съдържанието на екрана.

Това е всичко! На добър час!

Оценете тази статия: