Как предотвратить уязвимости загрузки файлов

Блоки загрузки файлов являются одними из самых слабых звеньев в веб-приложениях. Любые ошибки, даже те, которые вы можете считать мелкими, могут привести к тому, что прямой контроль над сервером попадет в руки хакера. По этой причине разработчик программного обеспечения должен знать наиболее распространенные ошибки и некоторые возможные методы атаки.

Так что же такое манипуляция клиентом? Как вы можете бороться с этим, чтобы обеспечить безопасность ваших веб-сайтов и пользователей? Проверять Как ваш сервер может быть взломан: вот как.

Как предотвратить уязвимости загрузки файлов - защита

Что такое манипуляция клиентом?

Манипуляции на стороне клиента — основная концепция атак на веб-приложения в целом. Проще говоря, это означает, что вы больше не можете доверять никаким данным, которые отправляете пользователю. Кроме того, манипулирование на стороне клиента является одной из основ разработки безопасных приложений. Если вы проверите свой модуль загрузки и обдумаете подделку на стороне клиента, данные, которым вы не доверяете, включают:

  1. Имя загруженного файла.
  2. Тип содержимого загруженного файла.

Здесь у вас есть возможность попасть в белый список в качестве разработчика программного обеспечения. Загруженные данные имени файла могут содержать что угодно с манипуляцией на стороне клиента. С данными типа содержимого загруженного файла, даже если злоумышленник загружает файл. exe, этот файл может отображаться в системе как изображение /jpeg.

Формат файла и белый список

Как предотвратить уязвимости загрузки файлов - защита

При разработке модулей загрузки файлов первое, что нужно сделать, это добавить формат файла в белый список. Например, пользователь хочет загрузить файл с именем «muo.jpeg». Вы должны убедиться, что формат файла, который пользователь хочет загрузить, — .jpeg. Для этого система должна проверить загруженный файл и определить, входит ли он в один из разрешенных форматов файлов. Чтобы понять, как это сделать, изучите следующий простой PHP-код:

$file_parts = pathinfo($filename);
switch($file_parts[‘extension’])
{
case “jpg”:
break;

case “bat”: // Or exe, dll, so, etc.
break;

case “”:
case NULL: // No file extension
break;
}

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

Предупреждение: Остерегайтесь генерировать данные о формате файла, анализируя имя файла в соответствии с символом точки (.), потому что злоумышленник может обойти этот шаг проверки с именем файла, например «muo.jpeg.php».

Что такое информация о типе контента?

Информация о типе контента является частью информации, отправляемой в HTTP-запросе для каждого загруженного файла. Интернет-браузер обнаруживает эту информацию и добавляет ее в отправленный запрос. Злоумышленник может попытаться изменить информацию путем манипулирования на стороне клиента и обхода проверок на стороне сервера. На этом этапе разработчику необходим механизм контроля для выполнения проверок достоверности информации о типе контента. Одного этого будет недостаточно. Тем не менее, разработчику важно обратить на это внимание.

Допустим, вы написали механизм для проверки правильности форматирования файла и принимает только файлы с форматом . Jpeg. В дополнение к этому предупредительному механизму вы можете проверять информацию о типе контента только в том случае, если и принимаете только файлы, содержащие информацию об изображении /jpeg, что является дополнительным уровнем защиты от кибератак. Проверять Что такое контроль доступа и зачем он нужен?

Flash SWF-файлы и этапы атаки

Данные о формате файла и типе содержимого не имеют значения для интернет-браузеров, поддерживающих подключаемые модули, такие как Adobe Flash Player. Хотя поддержка этого проигрывателя больше недоступна, эти связанные файлы все еще могут быть установлены на многих системах, хотя Flash по-прежнему представляет угрозу безопасности. В системе, которая не приняла соответствующих мер предосторожности, можно вызвать Flash-файл с тегом , независимо от его формата. Это приведет к еще одной серьезной проблеме безопасности.

Как предотвратить уязвимости загрузки файлов - защита

Чтобы принять меры, разработчик должен знать, какими путями могут воспользоваться киберпреступники. Вот как это может произойти:

  • Злоумышленник загружает SWF-файл (формат файла Adobe Flash) с именем «image.jpeg» на целевой веб-сайт. В процессе загрузки проверка белого списка подтверждает, что файл, загруженный злоумышленником, имеет . Jpeg. Проверка типа содержимого обходится манипулированием на стороне клиента. Представьте, что этот файл, загруженный злоумышленником, находится по адресу:
“www(dot)target-site(dot)com/images/images.jpeg”
  • Допустим, у злоумышленника есть веб-сайт под названием атакующий (точка) ком. Злоумышленник вызывает файл image.jpeg, загруженный на целевой веб-сайт, на веб-сайте злоумышленника, используя тег с заданным типом приложение / x-shockwave-flash.
  • Ничего не подозревающий пользователь заходит на сайт атакующий (точка) ком. Этот сайт вызывает SWF-файл по адресу www(dot)targetsite(dot)com/images/image.jpeg и выполняет команды, данные SWF.
  • С помощью этих шагов кибер-злоумышленник может создать действия HTTP-запроса для адреса веб-сайта. целевой сайт (точка) ком незаметно для обычных пользователей. С помощью этих запросов злоумышленник будет использовать сеанс ничего не подозревающего пользователя и обойти проверку CSRF.

Чтобы лучше понять этот сценарий атаки, рассмотрите следующий код в Content HTML Отправлено пользователю атакующий (точка) ком:

style=”height:1px;width:1px;” data=”www.target-site.com/images/image.jpeg" type=”application/x-shockwave-flash” allowscriptaccess=”always” flashvars=”c=read&u=somethings”

Одним из лучших решений является доступ к загруженным файлам с файлом, загруженным через другой субдомен. В приведенном выше сценарии вы можете получить доступ к статическим файлам не из того же домена, а из другого поддомена следующим образом:http(двоеточие)//file.target-site(dot)com/images/image.jpeg».

Другим решением является добавление информации Content-Disposition: вложение к ответу HTTP, когда вы получаете запрос на доступ к файлам, которые вы хотите загрузить. Проверять Преимущества и недостатки использования облачного хранилища для удаленной работы.

Примите меры предосторожности против уязвимостей загрузки файлов

Любая загрузка файлов, которую пользователи могут сделать на веб-сайт, опасна, поэтому это одна из проблем, на которую разработчики должны обращать наибольшее внимание. Если злоумышленник обнаружит такую ​​уязвимость, он может открыть слой внутри веб-сайта и легко использовать информацию на сервере. Очень важно контролировать все загружаемые пользователями файлы, применять методы внесения в белый список и по возможности скрывать расположение каталога, в который загружаются файлы.

И, конечно же, есть много других дополнительных шагов, которые вы должны предпринять для защиты своего веб-сайта, даже если вы примете все рекомендуемые меры предосторожности при загрузке файлов. Использование заголовков безопасности HTTP — один из таких шагов, которые вы можете предпринять. Вы можете просмотреть сейчас Что такое безопасность контейнеров и зачем она нужна?

Перейти к верхней кнопке