博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker默认escape html 防范xss
阅读量:5972 次
发布时间:2019-06-19

本文共 2422 字,大约阅读时间需要 8 分钟。

  hot3.png

freemarker 有html escape 方法,但是框架没有地方可以配置默认escape

1.<#escape>指令

2.<xxx?html>内建函数

方法一、

网上比较多的是通过TemplateLoader,给加载的template文件2头套<#escape>

<#escape x as x?html>your template code

参考:

但是现在我们应用的对freemarker做了扩展,一个页面分3个部分,一个layout、一个view、多个control。

多次render才到最终结果。要控制比较麻烦配置,也不友好。

方法二

改源码的$变量、默认全部转义、对固定的扩展的layout、一个view、多个control,配置正则原义输出。

变量是string类型的时候,用了xxx?string作为原义输出的内建函数。

缺点:比较暴力,修改了DollarViable源码,后续freemarker有升级要跟随修改

/**         * The original code         * env.getOut().write(escapedExpression.getStringValue(env));         */        String expr = escapedExpression.getCanonicalForm();        TemplateModel referentModel =  escapedExpression.getAsTemplateModel(env);        String output = Expression.getStringValue(referentModel, escapedExpression, env);                if (referentModel instanceof TemplateScalarModel) {            // layout placeholder and widget no escape and ?string            if (expr.indexOf("!noescape") > -1 || expr.indexOf("?html") > -1 || expr.indexOf("parameters.") > -1                    || expr.endsWith("?string") || doNoEscape(expr, env)) {                env.getOut().write(output);            } else {                env.getOut().write(freemarker.template.utility.StringUtil.HTMLEnc(output));            }        }else{            env.getOut().write(output);        }

 

UTF-8
#
${xxxxxxx.template.update.delay}
true
/macro/macros.ftl as spring
UTF-8
UTF-8
true,false
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
zh_CN

 

转载于:https://my.oschina.net/greki/blog/83246

你可能感兴趣的文章
Python2+Selenium入门05-关于WebElement类
查看>>
后端_ThinkPHP5
查看>>
JS中数据类型、内置对象、包装类型对象、typeof关系
查看>>
Redis | 001能做什么?
查看>>
vue+node全栈移动商城【11】连接mongodb并存入数据
查看>>
从 egg-bin 聊到 command line interface Tool
查看>>
图像搜索技术发展应知道
查看>>
React16性能改善的原理一
查看>>
【跃迁之路】【720天】程序员高效学习方法论探索系列(实验阶段477-2019.2.10)...
查看>>
扩展Spring Cloud Feign 实现自动降级
查看>>
代码片段
查看>>
jsonp跨域资源引起CORB
查看>>
鼠标右键兼容MAC版火狐浏览器
查看>>
web安全类
查看>>
Vue项目中使用基于pdf.js的vue-pdf插件在pc浏览器下阅览PDF文件
查看>>
编译VIM
查看>>
玩转Elasticsearch源码-一图看懂ES启动流程
查看>>
自动注册appleid
查看>>
OpenTracing Registry登记了129个仪器插件和追踪器
查看>>
使用 Gatsby.js 搭建静态博客 7 文章目录
查看>>