Skip to main content

V5.2.5 Sanitization and Sandboxing

Requirement:#

Verify that the application protects against template injection attacks by ensuring that any user input being included is sanitized or sandboxed.

Explanation:#

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

Remediation:#

Для защиты от атак внедрения шаблонов необходимо предпринять следующие меры:

  1. Проверка ввода пользователя.

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

  1. Очистка пользовательского ввода.

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

  1. Использовать механизм шаблонов со встроенной защитой.

Многие механизмы шаблонов имеют встроенные меры безопасности, которые могут предотвратить атаки путем внедрения шаблона. Рассмотрите возможность использования хорошо зарекомендовавшего себя и безопасного шаблонизатора.

  1. Пользовательский ввод в песочнице.

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

  1. Проверка и тестирование безопасности механизма шаблонов приложения.

Регулярные проверки и тестирование безопасности помогут выявить и устранить любые потенциальные уязвимости в приложении и его компонентах.

Пример кода для устранения атак путем внедрения шаблона зависит от используемого языка программирования и механизма шаблонов. Ниже приведен пример на Python:

from jinja2 import Environment, Template
# Sanitize user input
def sanitize_input(user_input):
# Ensure user input only contains alphanumeric characters
user_input = ''.join(c for c in user_input if c.isalnum())
return user_input
# Render template
def render_template(template_string, user_input):
env = Environment()
template = env.from_string(template_string)
return template.render(user_input=sanitize_input(user_input))
# Example usage
template_string = 'Hello, {{ user_input }}'
user_input = '<script>alert("attack")</script>'
rendered_template = render_template(template_string, user_input)
print(rendered_template)
# Output: Hello, <script>alert("attack")</script>

В этом примере функция sanitize_input используется для очистки пользовательского ввода, гарантируя, что он содержит только буквенно-цифровые символы. Функция render_template использует механизм шаблонов Jinja2 для рендеринга шаблона, передавая обработанный пользовательский ввод. Это помогает предотвратить атаки с внедрением шаблона, избегая включения вредоносного кода в шаблон.

Additional:#

https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/18-Testing_for_Server-side_Template_Injection.html https://cwe.mitre.org/data/definitions/94.html