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

Существуют несколько способов взлома сайтов. Самый распространённый взлом происходит через подбор пароля. К сожалению, даже в 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, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: