Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

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

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

Что такое фальсификация на стороне клиента?

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

instagram viewer

  • Имя загруженного файла.
  • Content-Type загруженного файла.

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

Расширение файла и белый список

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

$file_parts = информация о пути ($ имя файла);
выключатель($file_parts['расширение'])
{
случай "jpg":
перерыв;

случай "летучая мышь": // Или exe, dll, так и т.д.
перерыв;

случай "":
случайНУЛЕВОЙ: // Без расширения файла
перерыв;
}

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

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

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

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

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

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

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

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

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

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

стиль="высота: 1 пиксель; ширина: 1 пиксель;" данные ="www.target-site.com/images/image.jpeg" тип="приложение /x-shockwave-flash" разрешитьскриптакцесс="всегда" flashvars="с=читать&ты=что-то"

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

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

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

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

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