PebbleTemplates 支持了不少安全控制(这个是也模版引擎普遍存在的问题)
内容转义
核心是规避xss 问题,包含了自定以及手工处理,包含了html,js,css,url_param 。。。。
方法访问的
因为模版很容易引入一些非安全方法引用,官方包含了一个方法访问校验 MethodAccessValidator
已经包含了一些实现,默认使用的BlacklistMethodAccessValidator 主要的控制如下
private static final String[] FORBIDDEN_METHODS = {"getClass",
"wait",
"notify",
"notifyAll"};
@Override
public boolean isMethodAccessAllowed(Object object, Method method) {
boolean methodForbidden = object instanceof Class
|| object instanceof Runtime
|| object instanceof Thread
|| object instanceof ThreadGroup
|| object instanceof System
|| object instanceof AccessibleObject
|| this.isUnsafeMethod(method);
return !methodForbidden;
}
同时创建引擎的时候可以自己控制
PebbleEngine engine = new PebbleEngine.Builder().loader(delegatingLoader).methodAccessValidator(new BlacklistMethodAccessValidator()).extension(new MyExtension()).build();
说明
做好安全控制还是比较重要的,了解提供的基本能力,可以更好的确保安全
参考资料
https://pebbletemplates.io/wiki/guide/extending-pebble/
https://pebbletemplates.io/wiki/guide/escaping/
https://pebbletemplates.io/wiki/filter/escape/
https://pebbletemplates.io/wiki/guide/spring-boot-integration/