FreeMarker(七)Html转义
在不做任何处理的情况下,往页面传一串Html代码,它会嵌套到页面代码中,一起被编译并且显示。
比如:某个用户把自己的用户名写成a标签,最后显示出来的用户名就是一个超链接
例:
//传递的参数
map.put("sp6", "这是一段带有攻击性的字符串<a href='https://www.baidu.com/'>请点击</a>");
页面代码:
<html>
<head>
<meta charset="utf-8">
<title>进度条测试</title>
<script type="text/javascript" src="../js/jquery-1.11.1.min.js"></script>
</head>
<body>
${map.sp6}
<br/>
</body>
原先的图片已经失效,举个例子,比如:微信名称,我们可以将一些表情包,复制粘贴到名称的位置,我们的微信名称就会显示为表情包,
基于这个原理,一些不怀好意的 用户,就可以将自己的用户名,做成超连接,不知道的人一点击,就跑到奇怪的网站去了。
有两种解决方案:
1.在字符串后面加?html
${map.sp6?html}
2.使用<#escape>转义
值得注意的就是,<#escape>仅仅只对当前文件中的值做转义,而不会去处理嵌套的其它文件(Include)和宏
<#-- escape标签将Html代码作为字符串直接显示于页面 -->
<#escape x as x?html>
<p>特殊字符串: ${map.sp1}</p>
<p>特殊字符串: ${map.sp2}</p>
<p>特殊字符串: ${map.sp3}</p>
<p>特殊字符串: ${map.sp4}</p>
<#-- 内部不需要转义则的部分使用<#noEscape>标签-->
<p>取消转义 <#noEscape>${map.sp5}</#noEscape></p>
</#escape>
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY