Безпека при завантаженні файлів на сервер в php
Відео: © PHP - урок move_uploaded_file завантаження файлу на сервер
У минулій статті ми з Вами розбирали завантаження файлів на сервер в PHP. Однак, я Вам вже сказав, що використовувати код, який там був розглянутий, категорично не можна! І в цій статті ми поговоримо про безпеки при завантаженні файлів на сервер в PHP.
Давайте нагадаю код, який ми вчора розглядали:
lt ;?php
$ uploadfile ="Images /".$ _FILES[`Somename`] [`Name`] -
move_uploaded_file($ _FILES[`Somename`] [`Tmp_name`], $ uploadfile) -
?gt;
Фактично, на даний момент може бути завантажено абсолютно все, що завгодно: будь-які виконувані файли, скрипти, HTML-сторінки і інші дуже небезпечні речі. Тому обов`язково треба перевіряти завантаження дуже ретельно. І зараз ми з Вами займемося їх ретельною перевіркою.
Відео: PHP. Завантаження файлів на сервер
Оскільки різних варіантів завдань може бути дуже багато, ми розглянемо варіант із завантаженням простого зображення, на які повинні накладатися такі обмеження:
- Тип - тільки jpg (jpeg).
- Розмір - менш 100 КБ.
Тепер реалізуємо скрипт "loading.php"Відповідно до цих вимог:
lt ;?php
$ blacklist = array(".php",".phtml",".php3",".php4",".html",".htm") -
foreach($ blacklist as $ item)
if(preg_match("/ $ Item $ / i", $ _FILES[`Somename`] [`Name`]))exit-
$ type = $ _FILES[`Somename`] [`Type`] -
$ size = $ _FILES[`Somename`] [`Size`] -
if(($ type !="Image / jpg")($ type !="Image / jpeg"))exit-
if($ size gt;102400)exit-
$ uploadfile ="Images /".$ _FILES[`Somename`] [`Name`] -
move_uploaded_file($ _FILES[`Somename`] [`Tmp_name`], $ uploadfile) -
?gt;
Тепер давайте детально поясню, що тут відбувається. Насамперед ми перевіряємо на розширення завантаження. Якщо воно є PHP-скрипт, то ми такий файл просто не пропускаємо. Далі ми отримуємо MIME-type і розмір. Перевіряємо їх на задоволення наших умов. Якщо все добре, то ми завантажуємо файл.
Ви, напевно, можете запитати: "А навіщо треба перевіряти і розширення, і MIME-type?". Тут дуже важливо розуміти, що це далеко не одне і те ж. Якщо зловмисник спробує відправити PHP-файл через браузер, то і однієї перевірки MIME-type вистачить, щоб його спроба провалилася. А ось якщо він напише який-небудь скрипт, який буде формувати запит і відсилати вредосний файл, то цього не вистачить. Чому? А тому, що MIME-type задається клієнтом, а не сервером! І фактично, зловмисник може поставити будь-який MIME-type (І картинки теж), але при цьому відсилати PHP-скрипт. І ось саме таку хитру спробу ми і ламаємо, перевіряючи на розширення файлу.
Я відразу скажу, що даний код далеко не 100% захист (100% просто не існує), проте, зламати такий код буде дуже і дуже важко, тому можете сміливо стверджувати, що Ви забезпечили високу безпеку при завантаженні файлів на сервер через PHP.
- Безпека php на сервері
- Drag and drop завантаження файлів на сервер. Частина 1.
- Drag and drop завантаження файлів на сервер. Частина 3.
- Завантаження файлів на сервер в php
- Як користуватися curl
- Як завантажити файл linux
- Які ставити права доступу на хостингу
- Як оновити php на denwer.
- Команда wget linux
- Завантаження файлів великих розмірів в php
- Лічильник звернень до файлів
- Завантаження зображень з файлу в php
- Постійна циклічна завантаження андроїд - вирішення проблеми
- Динамічне завантаження файлів на jquery
- Відправка get-запитів в curl
- Права доступу до файлів
- Копіювання файлів scp
- Динамічна перевірка форми на jаvascript
- Установка curl на denwer
- Системні налаштування joomla
- Завантаження і вивантаження xml-документів через dom