Хорошо, tl; dr: используйте расширение Sandbox , максимально ограничьте возможности пользователя. НЕ анализируйте шаблон, чтобы определить, какие переменные используются, ВЫ определяете доступные переменные, а затем предоставляете их, когда пришло время визуализировать шаблон. Не доверяйте себе писать «тесты», которые определяют, безопасен ли шаблон. (Внесение в черный список ошибочно, закрытие «дыр» - это бесконечная битва, если программное обеспечение - сыр.) Twig позволяет хранить переменные, макросы и циклы. Это означает, что вы можете вызвать бесконечные циклы, исчерпание памяти и другие вещи, которые вы не хотите, чтобы пользователь мог вызвать.
Теперь я могу полностью понять, где вы исходящий из, предоставляя пользователю возможность настраивать электронные письма с помощью шаблона. Но выходить за рамки if
- это безумие.
Вместо этого вам следует использовать расширение песочницы , чтобы ограничить возможности пользователя и четко определить, что доступно пользователю . И наоборот. А затем вы просто указываете эти переменные. Не по запросу или что-то в этом роде. Просто предоставьте их и покончите с этим. Любой лог c, который может показаться вам привлекательным, вероятно, ошибочен. Это связано с безопасностью или, по крайней мере, с производительностью, и вы должны сделать это правильно.
Есть причина, по которой почти каждая опция шаблонов, доступная пользователям, предписывает, какие ключевые слова / заполнители / конструкции могут использоваться. Эта причина - безопасность и здравомыслие. Не будьте тем парнем, который должен объяснять, почему вашей компании «нужно больше серверов», потому что те, которые у вас есть, постоянно ломаются или забиты.
Если вы хотите убедиться, что шаблон в порядке: используйте его в песочнице . Используйте команду try-catch для анализа шаблона и визуализации некоторых переменных по умолчанию. Вы их предоставляете, так что это не должно быть проблемой. Если возникает исключение, передайте его пользователю разумным образом.
Не позволяйте недопустимым шаблонам попадать в производственный код. Всегда используйте песочницу для кода шаблона, предоставленного пользователем. Без исключений. Не доверяйте пользователю. Всегда. Пользователь в лучшем случае глуп, а в худшем - откровенно злонамерен. Оба вызовут проблемы.