Инъекция шаблонов (SSTI)
Внедрение выражений в серверный шаблонизатор, ведущее к выполнению кода на сервере.
Сигнатура
Server-Side Template InjectionSSTI (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"))