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

Безпека при завантаженні файлів на сервер в 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. Завантаження файлів на сервер




Оскільки різних варіантів завдань може бути дуже багато, ми розглянемо варіант із завантаженням простого зображення, на які повинні накладатися такі обмеження:

  1. Тип - тільки jpg (jpeg).
  2. Розмір - менш 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.

Поділися в соціальних мережах:

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