Подмена контента
Подмена контента (также известная как внедрение контента) - одна из распространенных уязвимостей веб-безопасности. Это позволяет конечному пользователю уязвимого веб-приложения подделывать или изменять фактическое содержимое веб-страницы. Пользователь может использовать лазейки в безопасности на веб-сайте, чтобы внедрить контент, который он / она хочет, на целевой веб-сайт. Когда приложение неправильно обрабатывает данные, предоставленные пользователем, злоумышленник может предоставить контент веб-приложению, обычно через значение параметра, которое отображается обратно пользователю.
Здесь возможны два основных типа инъекций:
- Внедрение текста
- 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.
- Передайте внутренние ключи сообщений, чтобы получить предопределенные значения сообщений или некоторые уникальные идентификаторы для идентификации отображаемого содержимого.