Работая с Handlebars, разработчики часто не осознают, как неправильное использование шаблонов может привести к серьёзным уязвимостям, связанным с внедрением. Хотя Handlebars JS автоматически экранирует выходные данные, небезопасные шаблоны, такие как тройные скобки или плохо написанные вспомогательные функции Handlebars, могут обойти защиту. В результате злоумышленники могут внедрять XSS-код, красть данные или запускать вредоносный код.
В этом руководстве показано, как применять безопасное использование Handlebars, приводятся примеры опасных и безопасных вариантов, а также объясняется, как автоматизировать проверку шаблонов в pipelineс такими инструментами, как Xygeni.
Почему шаблоны руля могут быть рискованными
По умолчанию Handlebars JS экранирует значения, чтобы предотвратить прямую инъекцию. Но многие разработчики отключают эту функцию, не осознавая рисков. Например, использование тройных фигурных скобок приводит к появлению необработанного HTML-кода:
If userInput is <script>alert('XSS')</script>, Скрипт выполняется в браузере. В результате даже один небезопасный шаблон может поставить под угрозу всё приложение.
Эти основные ошибки подчёркивают риск. Как показывает история, неправильное использование руля приводило к серьёзным последствиям в дикой природе. Давайте рассмотрим некоторые из наиболее известных случаев.
Реальные примеры уязвимостей рулей
Несмотря на то, что Рули JS экранирует значения по умолчанию, история показывает, что небезопасные шаблоны или слабые Помощники на руле вызвали серьезные проблемы:
1. Загрязнение прототипа на руле (рекомендация npm GHSA-2cf5-4w76-r9qv)
В 2021 году была обнаружена ошибка в handlebars Сам пакет. Ошибка позволила прототип загрязнения, где злоумышленники могли внедрять свойства в глобальные объекты с помощью специально созданных шаблонов.
- Влияние: Загрязнение прототипов может позволить злоумышленникам запустить код, получить более высокий уровень доступа или украсть данные.
- Exploit: Злоумышленники отправили вредоносный ввод, такой как
__proto__Свойства. При рендеринге шаблонов эти загрязнённые объекты меняли поведение приложения. - Урок: Даже шаблонизатор может быть рискованным, если его не обновлять. Сканирование зависимостей и своевременное обновление пакетов крайне важны.
2. XSS в пользовательских помощниках руля Asana (2019)
В 2019 году исследователи безопасности обнаружили, что Асана, инструмент управления задачами, предоставил пользователям возможность XSS из-за небезопасных пользовательских хелперов. Разработчики написали хелперы, которые возвращали необработанные строки, используя SafeString, минуя встроенную функцию экранирования Handlebars.
- Влияние: Злоумышленники внедряли вредоносный JavaScript-код в общие задачи или комментарии.
- Exploit: Полезные нагрузки, такие как
<script>alert('XSS')</script>запускались в браузере жертвы при открытии этих полей. - Урок: Никогда не отключайте экранирование, если у вас нет другого выбора. Всегда проверяйте пользовательские настройки. Помощники на руле перед их развертыванием.
Типы уязвимостей рулей
Небезопасное использование Рули JS Шаблоны могут раскрывать различные классы уязвимостей. Понимание этих уязвимостей помогает разработчикам точно знать, что следует предотвратить:
Межсайтовый скриптинг (XSS)
Это самый распространённый недостаток. Он возникает, когда разработчики используют тройные скобки. {{{}}} или сырые помощники, которые отключают возможность экранирования.
- Влияние: Злоумышленники могут внедрить
<script>теги, HTML или фреймы, которые запускаются в браузере пользователя. - Пример:
If
userInputсодержит<script>alert('XSS')</script>, он выполняется немедленно.
Прототип загрязнения
Как видно на npm advisory GHSA-2cf5-4w76-r9qvвредоносный ввод может изменять глобальные объекты с помощью специально созданных шаблонов.
- Влияние: Это может привести к произвольному поведению, повышению привилегий или утечке данных.
- Урок: Всегда держи
handlebarsобновлены и запущены проверки зависимостей в CI/CD.
Внедрение шаблонов на стороне сервера (SSTI)
SSTI происходит, когда ненадежные входные данные передаются непосредственно в шаблонизатор, работающий на сервере. Рули JS, если разработчики компилируют шаблоны, используя необработанный пользовательский ввод, злоумышленник может выполнить полезную нагрузку на уровне сервера.
движок может попытаться оценить его, предоставляя доступ к файлам на стороне сервера.
- Влияние: В отличие от XSS, который влияет только на браузер, SSTI может обеспечить прямой доступ к серверной среде.
- Профилактика: Никогда не компилируйте шаблоны из ненадёжных источников. Используйте только предопределённые шаблоны и проверяйте входные данные перед рендерингом.
Аналогичные риски возникают и в других экосистемах. Например, см. наше руководство по Внедрение зависимостей Python изучить безопасные методы работы в другом контексте.
Злоупотребление логикой в помощниках
На заказ Помощники на руле могут быть опасны, если они допускают необработанные строки или работают с непроверенными входными данными.
- Влияние: Злоумышленники могут обойти способы побега или обмануть помощников, заставив их раскрыть конфиденциальные данные.
- Пример:
Этот помощник полностью отключает экранирование, и его следует избегать.
Утечка данных
Иногда помощники или неправильно настроенные шаблоны раскрывают конфиденциальную информацию.
- Влияние: Токены, значения конфигурации или учетные данные базы данных могут быть отображены в виде HTML-вывода.
- Урок: Никогда не раскрывайте секреты в шаблонах; проверяйте и сканируйте свои репозитории на предмет случайных утечек.
В совокупности эти категории отражают спектр рисков, с которыми сталкиваются разработчики. В результате даже небольшие ошибки в Handlebars JS могут привести к проблемам в цепочке поставок, если их не исправить.
Почему это важно для разработчиков
Эти уязвимости доказывают, что небезопасное использование не является теоретическим, оно эксплуатировалось на реальных платформах, таких как Asana и пакеты нпмБолее того, поскольку Handlebars JS широко используется в Node.js и фронтенд-проектах, небезопасные вспомогательные функции или устаревшие зависимости быстро становятся риском для цепочки поставок программного обеспечения.
Хотите автоматически блокировать эти риски? Начать бесплатную пробную версию Xygeni и добавить guardrails и на Вашем pipeline прямо сейчас
Рекомендации по безопасному использованию руля
Чтобы избежать ошибок при внедрении кода, следуйте этим рекомендациям по безопасному кодированию:
1. Всегда используйте двойные скобки
Это гарантирует, что шаблонизатор экранирует HTML перед рендерингом.
2. Проверка и очистка входных данных
Кроме того, проверяйте входные данные перед их передачей в шаблоны. Библиотеки, такие как валидатор.js
3. Ограничьте количество опасных помощников
Плохо спроектирован Помощники на руле часто вызывают уязвимости:
Это полностью исключает экранирование. Однако безопасные вспомогательные функции следует ограничить простыми операциями, такими как форматирование дат или обрезка текста.
4. Используйте политику безопасности контента (CSP)
Кроме того, необходимо применять мощные заголовки CSP для уменьшения радиуса взрыва при любой инъекции.
Эти рекомендации важны на этапе разработки. Кроме того, вы можете добавить автоматизированные проверки, чтобы небезопасный код не попадал в эксплуатацию.
Автоматизация проверки в CI/CD Pipelines
Ручной проверки недостаточно. Уточним, что небезопасные шаблоны Handlebars могут попасть в производство, если не будут внедрены автоматизированные проверки:
- SAST условиями,: Флаг
{{{in.hbsфайлы. - Секретные сканеры: Обнаружение учетных данных, встроенных в шаблоны.
- CI/CD guardrails: Разрушайте сборки, когда это небезопасно Помощники на руле или появляются тройные фигурные скобки.
Например, вы можете установить ограждение в pipelines:
Эти проверки снижают вероятность использования небезопасных шаблонов, но автоматизация Для масштабирования нужна платформа. Именно здесь Xygeni обеспечивает дополнительную защиту.
Вы также можете увидеть, как обеспечивается pipelines в Bitbucket работает в нашем Часто задаваемые вопросы о безопасности Bitbucket.
Как Xygeni помогает предотвратить небезопасное использование руля
Написание безопасного кода важно, но настоящая защита достигается за счет автоматизации. Ксигени создает Рули JS безопаснее, добавив проверки в свой рабочий процесс:
- SAST для шаблонов: сканы
.hbsфайлы для обнаружения небезопасных{{{или рискованные индивидуальные помощники. - Guardrails: Установите простые правила на GitHub, GitLab или Bitbucket. При обнаружении небезопасного JS-кода Handlebars сборка останавливается.
- Автоисправление: Предлагает безопасные исправления в pull requests, заменив тройные скобки на безопасные двойные скобки или вызовы доверенных вспомогательных функций.
- Секреты и проверки конфигурации: Находит токены или учетные данные, скрытые в шаблонах, до их утечки.
- CI/CD Безопасность.: Блокирует небезопасные фрагменты во время слияния, поэтому в производство попадает только безопасный код.
С Xygeni безопасно Рули JS Использование — это уже не просто руководство. Оно становится частью вашей автоматизированной системы. pipeline.
Собираем все вместе
Handlebars практически безопасен изначально, но неправильное использование всё ещё может открыть путь для инъекционных атак. Соблюдение передовых практик, проверка входных данных и использование безопасных помощников помогают снизить риски. Однако настоящее преимущество достигается, когда эти проверки автоматизированы в вашем устройстве. pipelines.
В заключение следует отметить, что сочетание хороших привычек кодирования с такими инструментами, как Xygeni, помогает предотвратить ошибки внедрения и обеспечивает безопасность шаблонов, не замедляя доставку.





