freemarker默认escape html 防范xss
为什么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相关推荐
- ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer
项目名称:HtmlSanitizer NuGet安装指令:Install-Package HtmlSanitizer 官方网站:https://github.com/mganss/HtmlSaniti ...
- thinkphp6 防范xss攻击
转化的思想防范xss攻击 转化的思想:将输入内容中的<>转化为html实体字符. 原生php中对xss攻击进行防范,使用htmlspecialchars函数,将用户输入的字符串中的特殊字符 ...
- 网络(14)-Web站点如何防范XSS、CSRF、SQL注入攻击?
一.XSS跨站脚本攻击 XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,比如获取用户的Cookie ...
- Laravel防范xss攻击
XSS 也称跨站脚本攻击 (Cross Site Scripting),恶意攻击者往 Web 页面里插入恶意 JavaScript 代码,当用户浏览该页之时,嵌入其中 Web 里面的 JavaScri ...
- 使用NCR防范xss。
http://my.oschina.net/xpbug/blog/53005 在WEB前端开发的过程中,由于大量的URL和多处使用的传递参数,使得很多开发者经常会留下XSS的漏洞.在安全测试中一旦发现 ...
- 使用antisamy防范XSS攻击及常用antisamy策略文件
本文提及的XML策略文件下载地址:http://download.csdn.net/detail/softwave/9716400 antisamy的maven依赖: <dependency&g ...
- 使用AntiSamy防范XSS跨站脚本攻击
0x00 什么是XSS? XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web application中的计算机安全漏洞.XSS通过在用户端注入恶意的可运行脚本,若服 ...
- js html转为实体,字符串js编码转换成实体html编码的方法(防范XSS攻击)
js代码在html页面中转换成实体html编码的方法一: js代码转换成实体html js代码转换成实体html--红 function test(){ alert('测试红') } test(); ...
- art-template入门(八)之选项
转载自 art-template选项 template.defaults // 模板名 filename: null,// 模板语法规则列表 rules: [nativeRule, artRule] ...
最新文章
- Redux 学习笔记
- 二、安装Spark集群
- svm的错误理解之一
- 这6种性格的人不适合做数据分析
- quartz mysql 初始化_quartz scheduler 从数据库初始化
- robotframework安装_python3.9.0 + robotframework + selenium3 实例体验
- 微信公众平台开发5:翻译功能
- python里面的list
- 一个简单的DDraw应用程序2
- 状态码302_HTTP状态码 201,202,302,405 ... 傻傻分不清,看这一个项目就够啦
- 「JXOI2018」游戏
- mysql安装包5.7.17.0_mysql-5.7.17-winx64压缩版的安装包下载和安装配置
- Linux部署东方通TongWeb7
- 首款国产开源数据库TBase核心架构演进
- Shell批量解压tar.gz压缩包(转)
- 数字图像处理与Python实现笔记之图像压缩
- sd卡数据恢复源码android,SD卡数据恢复非常简单,想学的看过来!
- android编程拨号界面,在Android4.0中Contacts拨号盘界面剖析(源码)
- 各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
- Tensorflow2.6实现Unet结构神经网络(3D卷积)识别脑部肿瘤并实现模型并行
热门文章
- 2018年新版C/C++学习路线图(内含大纲+视频+工具+教材+面试)
- Ubuntu下面安装日语输入法
- 专利孔卵形装置的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 程序员对Windows环境下计算器的必备技巧总结(未完待续...)
- JAVA WEB如何让没有WebContent的eclipse可以正常在浏览器显示图片
- Mac冒险游戏---巨人约顿for Mac
- 贵金属投资交易风险高吗?
- mysql备份到带库_MySQL数据备份
- Python爬虫项目实战—全站 950 套美女写真套图爬虫下载
- GPS精度因子(GDOP,PDOP,HDOP,VDOP,TDOP)