Я разрабатываю средство визуализации, в котором пользователь может использовать заполнитель %...%
. Значение этого заполнителя выбирается в соответствии с контекстом ex. %Contract_Name% => 'Contract N°200'.
Для этого используется шаблон django. Чтобы проверить это, я написал следующие тесты:
def test_render_ssti_1(self):
content = " %{% globals %}% "
renderer = Renderer()
with self.assertRaises(SuspiciousOperation):
_ = renderer.render(content)
def test_render_ssti_2(self):
content = " %{% import os %}{{ os.popen('whoami').read() }}% "
renderer = Renderer()
with self.assertRaises(SuspiciousOperation):
_ = renderer.render(content)
def test_render_ssti_3(self):
content = " % [1 + 1] % "
renderer = Renderer()
with self.assertRaises(SuspiciousOperation):
_ = renderer.render(content)
def test_render_ssti_4(self):
content = " %{{ 7*'7' }}% "
renderer = Renderer()
with self.assertRaises(SuspiciousOperation):
_ = renderer.render(content)
Интересно, не пропустил ли я другие варианты использования.