Подмена контента

Опубликовано: 9 Июля, 2021

Подмена контента (также известная как внедрение контента) - одна из распространенных уязвимостей веб-безопасности. Это позволяет конечному пользователю уязвимого веб-приложения подделывать или изменять фактическое содержимое веб-страницы. Пользователь может использовать лазейки в безопасности на веб-сайте, чтобы внедрить контент, который он / она хочет, на целевой веб-сайт. Когда приложение неправильно обрабатывает данные, предоставленные пользователем, злоумышленник может предоставить контент веб-приложению, обычно через значение параметра, которое отображается обратно пользователю.

Здесь возможны два основных типа инъекций:

  • Внедрение текста
  • HTML-инъекция

Внедрение текста:

Внедрение текста - это подкатегория, в которой пользователь сможет вводить на страницу только обычный текст. Другими словами, невозможно внедрить исполняемое содержимое JavaScript, команды оболочки или содержимое HTML. В большинстве случаев пользователь может просто изменить часть текстового содержимого, которое уже есть на веб-сайте.

Внедрение текстового содержимого

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

 https://www.testsite.com/loginAction?userName=test123&password=test123/

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

 https://www.testsite.com/loginAction?errorMsg=PasswordEmpty

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

Сайт может быть надежным веб-сайтом, и пользователь может добавлять оскорбительный контент и распространять ссылку, а жертве - похоже, что владелец сайта разместил оскорбительный контент.

HTML-инъекция:

HTML-инъекция похожа на текстовую инъекцию и, как следует из названия, позволяет вставлять HTML-контент. Это относительно серьезный класс уязвимостей, связанных со спуфингом контента, поскольку с помощью HTML можно сделать оскорбительный контент более заметным, чем с помощью обычного текста.

Внедрение HTML-содержимого
Некоторые сайты также передают HTML-контент в параметрах запроса. Например, во всплывающих окнах или баннерах сайты действительно передают фактический HTML-контент в параметрах и помещают его внутри div например,

 https://www.testsite.com/setAdContent?divMessage=<h1>Нажмите здесь </h1>

А значение параметра divMessage переносится на сайт внутри div и отображается как HTML без фильтрации. Это серьезная уязвимость, и очевидно, что ее использование может значительно подорвать доверие к сайту.

Его можно изменить как,

 https://www.testsite.com/setAdContent?divMessage=<marquee><h1>Не используйте этот сайт </h1> <marquee>

и на вашем собственном сайте будет прокручивающееся сообщение, запрещающее его использовать.

XSS через HTML-инъекцию
Это может быть еще более серьезным, когда сообщение из параметров напрямую отображается без какой-либо кодировки / фильтрации. В этом случае это приводит к еще более серьезной уязвимости XSS, известной как межсайтовый скриптинг, когда пользователь может внедрить исполняемый код JavaScript, который полностью ставит под угрозу безопасность веб-сайта.

Это будет примерно так,

 https://www.testsite.com/setAdContent?divMessage=<body onload = javascript: alert (1) >>

и ваш сайт подвержен межсайтовому скриптингу.

Меры предосторожности:

  • Никогда не создавайте и не отправляйте сообщения об ошибках через параметры запроса.
  • Предпочитайте использование сообщений, предопределенных в файле свойств.
  • Избегайте передачи содержимого HTML через параметры запроса.
  • В случае необходимости передать любой HTML-контент выполните кодирование / фильтрацию перед рендерингом как HTML.
  • Передайте внутренние ключи сообщений, чтобы получить предопределенные значения сообщений или некоторые уникальные идентификаторы для идентификации отображаемого содержимого.