为什么80%的码农都做不了架构师?>>>   

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

1.<#escape>指令

2.<xxx?html>内建函数

方法一、

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

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

参考: http://techdiary.peterbecker.de/2009/02/defending-against-xss-attacks-in.html

但是现在我们应用的对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 ?stringif (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);}
<!-- 设置 ViewResolver --><bean id="freemarkerConfiguration"class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"><property name="templateLoaderPath"value="file://${xxxxxx.template.templatePath}" /><property name="freemarkerSettings"><props><prop key="default_encoding">UTF-8</prop><prop key="number_format">#</prop><!-- 配置缓存时间 --><prop key="template_update_delay">${xxxxxxx.template.update.delay}</prop><prop key="classic_compatible">true</prop><prop key="auto_import">/macro/macros.ftl as spring</prop><prop key="url_escaping_charset">UTF-8</prop><prop key="defaultEncoding">UTF-8</prop><prop key="boolean_format">true,false</prop><prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop><prop key="date_format">yyyy-MM-dd</prop><prop key="locale">zh_CN</prop></props></property><property name="freemarkerVariables"><map><entry key="noescape_patterns" value-ref="noescape_patterns"/></map></property></bean><!-- 不进行转义正则 --><util:list id="noescape_patterns" list-class="java.util.ArrayList"><bean class="java.util.regex.Pattern"><constructor-arg value="(^placeholder$)|(^widget)|(^token\(\)$)" />         <constructor-arg value="0"/> </bean></util:list>

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

freemarker默认escape html 防范xss相关推荐

  1. ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer

    项目名称:HtmlSanitizer NuGet安装指令:Install-Package HtmlSanitizer 官方网站:https://github.com/mganss/HtmlSaniti ...

  2. thinkphp6 防范xss攻击

    转化的思想防范xss攻击 转化的思想:将输入内容中的<>转化为html实体字符. 原生php中对xss攻击进行防范,使用htmlspecialchars函数,将用户输入的字符串中的特殊字符 ...

  3. 网络(14)-Web站点如何防范XSS、CSRF、SQL注入攻击?

    一.XSS跨站脚本攻击 XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie ...

  4. Laravel防范xss攻击

    XSS 也称跨站脚本攻击 (Cross Site Scripting),恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页之时,嵌入其中 Web 里面的 JavaScri ...

  5. 使用NCR防范xss。

    http://my.oschina.net/xpbug/blog/53005 在WEB前端开发的过程中,由于大量的URL和多处使用的传递参数,使得很多开发者经常会留下XSS的漏洞.在安全测试中一旦发现 ...

  6. 使用antisamy防范XSS攻击及常用antisamy策略文件

    本文提及的XML策略文件下载地址:http://download.csdn.net/detail/softwave/9716400 antisamy的maven依赖: <dependency&g ...

  7. 使用AntiSamy防范XSS跨站脚本攻击

    0x00 什么是XSS? XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web application中的计算机安全漏洞.XSS通过在用户端注入恶意的可运行脚本,若服 ...

  8. js html转为实体,字符串js编码转换成实体html编码的方法(防范XSS攻击)

    js代码在html页面中转换成实体html编码的方法一: js代码转换成实体html js代码转换成实体html--红 function test(){ alert('测试红') } test(); ...

  9. art-template入门(八)之选项

    转载自  art-template选项 template.defaults // 模板名 filename: null,// 模板语法规则列表 rules: [nativeRule, artRule] ...

最新文章

  1. Redux 学习笔记
  2. 二、安装Spark集群
  3. svm的错误理解之一
  4. 这6种性格的人不适合做数据分析
  5. quartz mysql 初始化_quartz scheduler 从数据库初始化
  6. robotframework安装_python3.9.0 + robotframework + selenium3 实例体验
  7. 微信公众平台开发5:翻译功能
  8. python里面的list
  9. 一个简单的DDraw应用程序2
  10. 状态码302_HTTP状态码 201,202,302,405 ... 傻傻分不清,看这一个项目就够啦
  11. 「JXOI2018」游戏
  12. mysql安装包5.7.17.0_mysql-5.7.17-winx64压缩版的安装包下载和安装配置
  13. Linux部署东方通TongWeb7
  14. 首款国产开源数据库TBase核心架构演进
  15. Shell批量解压tar.gz压缩包(转)
  16. 数字图像处理与Python实现笔记之图像压缩
  17. sd卡数据恢复源码android,SD卡数据恢复非常简单,想学的看过来!
  18. android编程拨号界面,在Android4.0中Contacts拨号盘界面剖析(源码)
  19. 各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
  20. Tensorflow2.6实现Unet结构神经网络(3D卷积)识别脑部肿瘤并实现模型并行

热门文章

  1. 2018年新版C/C++学习路线图(内含大纲+视频+工具+教材+面试)
  2. Ubuntu下面安装日语输入法
  3. 专利孔卵形装置的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. 程序员对Windows环境下计算器的必备技巧总结(未完待续...)
  5. JAVA WEB如何让没有WebContent的eclipse可以正常在浏览器显示图片
  6. Mac冒险游戏---巨人约顿for Mac
  7. 贵金属投资交易风险高吗?
  8. mysql备份到带库_MySQL数据备份
  9. Python爬虫项目实战—全站 950 套美女写真套图爬虫下载
  10. GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)