У нашій статті ми розглянемо приклад створення 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. Для цього необхідно проводити перевірку наявності