Инъекция шаблонов (SSTI)

Внедрение выражений в серверный шаблонизатор, ведущее к выполнению кода на сервере.

СигнатураServer-Side Template Injection

SSTI (Server-Side Template Injection) возникает, когда пользовательский ввод подставляется прямо в исходный текст шаблона (Jinja2, Twig и др.). Шаблонизатор интерпретирует ввод как выражение, что может привести к выполнению произвольного кода на сервере.

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

from jinja2 import Template

# Опасно: ввод становится телом шаблона
name = request.get("name")
Template("Привет " + name).render()  # ввод {{ 7*7 }} вычислится

# Безопасно: ввод — это данные, а не шаблон
tmpl = Template("Привет {{ name }}")
tmpl.render(name=request.get("name"))
← Все записи: Веб-уязвимости и защита
Поддержать проект