Отключение статического контекста и вызова метода в Thymeleaf
В настоящее время мы используем Thymeleaf для разбора шаблонов. Мы хотим предложить эту функцию нашим пользователям, чтобы пользователи могли предоставлять собственные шаблоны. Тем не менее, Thymeleaf очень мощный и способен вызывать методы и получать доступ к статическим ресурсам.
Есть ли способ отключить как вызов Java-методов (или внесение в белый список некоторых важных вызовов), так и отключение Thymeleaf возможности доступа к статическим полям и методам?
Нам нужно только разрешить пользователям использовать базовые операторы IF, циклы и доступ к полям объекта.
1 ответ
Короче - не бойся.
В настоящее время мы используем Thymeleaf для разбора шаблонов. Мы хотим предложить эту функцию нашим пользователям, чтобы пользователи могли предоставлять собственные шаблоны. Тем не менее, Thymeleaf очень мощный и способен вызывать методы и получать доступ к статическим ресурсам.
Это так, и он предназначен для этого без (безопасного) способа, который я знаю для отключения этой функции. Даже если бы вы могли отключить то, что вы хотите, с помощью какого-то препроцессорного хака, полагать, что это водонепроницаемый, кажется мне невероятно рискованным - я бы не советовал. (Даже если пользователи не имеют доступа к чему-либо нежелательному, например, они все равно могут многократно выполнять произвольный код, чтобы перегружать сервер и медленно загружать страницу.)
Вместо этого я бы выбрал более "нормальный" способ раскрытия функциональности, которую пользователи ожидают увидеть через конечную точку, которую они могут вызывать через AJAX. Затем они могут создавать свои формы в старом обычном HTML / JS, совершая дополнительные вызовы для любых других ресурсов, которые им нужны по пути.
Если вы беспокоитесь о дополнительных вызовах AJAX, вы также можете статически внедрить объект JSON, который содержит все, что может понадобиться пользователю в заголовке страницы - они могут затем отображать содержимое этого содержимого в любом месте.