我们目前正在使用Thymeleaf来解析模板。我们希望为用户提供此功能,以便用户可以提供自定义模板。但是,Thymeleaf非常强大,能够调用方法并访问静态资源。
有没有办法禁用调用Java方法(或者将一些重要的调用列入白名单),以及禁止Thymeleaf能够访问静态字段和方法?
我们只需要允许用户使用基本的IF语句,循环和访问对象字段。
答案 0 :(得分:3)
简而言之 - 不要害怕。
我们目前正在使用Thymeleaf来解析模板。我们希望为用户提供此功能,以便用户可以提供自定义模板。但是,Thymeleaf非常强大,能够调用方法并访问静态资源。
它是,并且它的设计是没有(安全)方式,我知道禁用此功能。即使你可以通过某种预处理器破解来禁用你想要的东西,依赖它是不漏水的,这对我来说似乎是非常危险的 - 我真的不会建议它。 (例如,即使用户不能访问任何不合适的内容,他们仍然可以反复执行随机代码以使服务器陷入困境并使页面加载缓慢。)
相反,我会看一下更为“正常”的路径,即通过可以通过AJAX调用的端点公开用户期望看到的功能。然后,他们可以在普通的旧HTML / JS中构建他们的表单,并在此过程中对他们需要的任何其他资源进行额外调用。
如果您担心额外的AJAX调用,您还可以静态注入一个JSON对象,该对象包含用户在页面标题中可能需要的所有内容 - 然后他们可以在任何他们想要的地方显示该内容。