Взлом сайтов через загрузку файла

Существуют несколько способов взлома сайтов. Самый распространённый взлом происходит через подбор пароля. К сожалению, даже в 21 веке администраторы ленятся делать надёжные пароли. Поэтому рекомендуем использовать наш "Генератор паролей".

Следующим по списку стоит взлом через уязвимости сайта. К примеру, SQL инъекция. От неё можно защититься только грамотной обработкой входящих данных. Которые включают в себя не только GET и POST, но и COOKIE (и др.способы хранения, которые используются сайтом).

Помимо этого существует целый класс атак через загрузку файла на сервер. Но в отличии от предыдущих способов, от него есть довольно простая защита. Её можно сделать через файл .htaccess, о котором пойдёт речь далее.

Отключение PHP в папке через .htaccess

Суть атаки через загружаемый файл заключается в следующем. Все исполняемые файлы на хостинге имеют расширение .PHP. Если запросить такой файл, то скрипт выполнится. Следовательно, загрузив произвольный скрипт на сайт и обратившись к нему, можно выполнить любой код.

Загрузка PHP файлов на сервер происходит через формы, где есть возможность добавить файл. К примеру, в разделе управления личными данными пользователей можно загрузить аватар пользователя. Но если обычный пользователь загружает картинки с расширением JPEG, PNG, GIF и т.п., то атакующий будет пытаться загрузить файл .PHP, который содержим вредоносный код. Этот код может делать всё, что угодно. К примеру, полностью удалять сайт.

Первый уровень безопасности должен заключаться в проверке расширения загружаемых файлов. На PHP он может быть реализован таким кодом:
$allowedExts = array("jpg", "jpeg");
$extension = end(explode(".", $_FILES["file"]["name"]));
if(!in_array(strtolower($extension), $allowedExts)) {
   // ошибка загрузки файла - неправильное расширение
   die("File type error");
}else{
  // сохранение файла
}
Этот код будет пропускать на сохранение только файлы, у которых в конце имени файла стоит или "jpg", "jpeg". Но иногда бывает, что загрузка файлов реализована внутри CMS, и отсутствует возможность изменить код загрузчика (потому что при следующем обновлении CMS он затрётся). При этом хочется обезопасить сайт. Тогда выход один - запретить исполнение файлов в папке, куда загружаются файлы. Делается это путём добавления в неё файла .htaccess, содержащего специальные директивы, отключающие обработку PHP скриптов в папке. Чтобы скрипты при их вызове открывались как текстовые файлы, а не исполнялись.

Приведём пример содержания файла .htaccess. Этот файл находится в папке "upload", куда загружаются файлы от пользователей. Сайт работает на виртуальном хостинге с PHP версии 7:
<IfModule mod_mime.c>
   <Files ~ \.(php|php3|php4|php5|php6|php7|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var|phar)>
      SetHandler text/plain
      ForceType text/plain
   </Files>
</IfModule>
<IfModule mod_php7.c>
   php_flag engine off
</IfModule>
Первая часть с "mod_mime.c" заставляет Apache открывать файлы как обычные текстовые. Вторая часть с "mod_php7.c" блокирует работу PHP в папке. Получается двойная защита. А лишняя ли она или нет - это решать владельцу сайта.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: