Php скрипт завантаження файлів

У нашій статті ми розглянемо приклад створення php скрипта завантаження файлів на сервер. Наш простий приклад завантаження файлів буде мати 2 файли: форма (form.html), php скрипт завантаження файлів (uploader.php).

Тепер розберемо все детально. Спочатку проаналізуємо файл форми form.html:

Як бачите це простий html код, нічого складного тут немає, єдине, якщо форма буде завантажувати файли на сервер, то повинен бути прописаний атрибут enctype = "multipart / form-data".

Наша форма буде виглядати так:

ПрімерPHP скрипта завантаження файлів

Тепер розберемося з php файлом, який буде завантажувати файли на сервер. Нижче надано його вихідний код:

Як працює PHP скрипт завантаження файлів?

uploader.php це простий php скрипт завантаження файлів на сервер, який буде завантажувати наші файли в певну директорію сайту, яка вказується рядком $ target_path = 'uploaded_files /';

Далі ми переміщаємо долучення за допомогою функції move_uploaded_file (), перший її аргумент це наш файл завантаження, другий це шлях до папки сайту, в яку будемо завантажувати файл.

Ну і само собою робимо елементарний висновок повідомлень за допомогою if / else, щоб зрозуміло було, завантажений наш файл чи ні.

Захист від хакерських зломів при завантаженні файлу

Ми розглянемо не тільки захист в плані хакерських зломів, але й інші небажані проблеми, що виникають при завантаженні файлів на сервер.

PHP оболонка файлу

Це перша проблема, пов'язана із завантаженням файлів на сервер. Коли завантаження файл має оболонку php, і це не означає, що його розширення буде php. Він може мати вигляд image.jpg (.gif. Png ...). Але всередині виглядати подібним чином:

Деякі умільці також можуть виконувати команди на сервері за допомогою серфінгу по url:

Для захисту, можна реалізувати MIME перевірку файлу. Нижче дивіться приклад:

Даний шматок php коду перевіряє, чи є файл завантаження GIF файлом. Вставте цей код перед php скриптом завантаження файлів. Природно, ви можете поміняти перевірку на jpg, pngілі інші потрібні вам файли.

По правді сказати, і цей спосіб захисту можна обійти, якщо послати заголовок header, з вказівками MIME. Для цього необхідно проводити перевірку наявності