Безпека при завантаженні файлів на сервер в 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
Постійна циклічна завантаження андроїд - вирішення проблеми
Чи варто використовувати gzip
Відправка get-запитів в curl
Копіювання файлів scp
Як оновити php на denwer.
Як користуватися curl
Завантаження і вивантаження xml-документів через dom
Системні налаштування joomla