String templateName = "Whatever from any variable"
StringTemplateLoader stringLoader = new StringTemplateLoader();
stringLoader.putTemplate(templateName, templateContent);
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setTemplateLoader(stringLoader);
// Create Template class object & get the Template
Template template = cfg.getTemplate(templateName);
// Render the template into a Writer, here a StringWriter
StringWriter writer = new StringWriter();
// Merge the model & template
template.process(dataModel, writer);
在我的代码中添加了这一行之后(就在模板示例化之后),我的代码是安全的。 非常重要的是要知道,即使你实现了这一点,如果你也像文档中解释的那样保持api_builtin_enabled到false(默认值),你会更安全。 This article表明,即使使用更严格的解析器ALLOWS_NOTHING_RESOLVER,如果api_builtin_enabled设置为true,您仍然可能存在该漏洞。
1条答案
按热度按时间1aaf6o9v1#
在我的用例中,我检索Freemarker模板并将模板与Java代码合并,如下所示:
这里也受到了和OP一样的攻击
我的解决方案是按照注解中所说的那样设置
SAFER_RESOLVER
,但在模板示例中设置值,如下所示:在我的代码中添加了这一行之后(就在模板示例化之后),我的代码是安全的。
非常重要的是要知道,即使你实现了这一点,如果你也像文档中解释的那样保持
api_builtin_enabled
到false
(默认值),你会更安全。This article表明,即使使用更严格的解析器
ALLOWS_NOTHING_RESOLVER
,如果api_builtin_enabled
设置为true,您仍然可能存在该漏洞。