Z-Blog 主题输出转义:什么时候该转义、转早了会怎样
摘要
转义这事两个方向都会出问题。不转义,可能被注入;转多了,页面上全是 < 这种字符。默认是转的模板里 {$article.Title} 这种输出,Z-Blog 默认做 HTML 转义。所以标题里带个
转义这事两个方向都会出问题。不转义,可能被注入;转多了,页面上全是 < 这种字符。
默认是转的
模板里 {$article.Title} 这种输出,Z-Blog 默认做 HTML 转义。
所以标题里带个 < 符号,页面上正常显示成 <,不会破坏结构。
这是好事,别去关它。
什么时候要原样输出
正文。正文本身就是 HTML,转义了就把标签当文字显示了,页面上会出现一堆 <p>。
正文要用不转义的写法。具体哪种取决于主题怎么传的,看模板里已有的写法,跟着来。
属性里最容易出事
把用户可控的值塞进 HTML 属性,比如 title="{\$x}"。
如果 $x 里有双引号,属性就被截断了,后面的内容跑到属性外面,等于开了一个注入口。
属性值里的引号必须处理掉。宁可用单引号包属性,也别裸着拼。
URL 里更要注意
拼链接时把参数直接接上去,?q={$keyword}。
关键词里有 & 和 # 的时候链接就断了。
该 urlencode 的地方一定 encode。
怎么验
发一篇正文带 <script>alert(1)</script> 的草稿,前台打开。
弹窗了就是有洞。显示成文本就是对的。
再试一个标题带双引号的,看列表页有没有错位。
一句话原则
来自用户的内容,输出前转义。来自系统自己生成、确定是 HTML 的内容,才原样输出。
拿不准就转。多显示几个字符,比被注入强。
2026年10月06日 05:30
前后30天 · 点日期看归档
9月6日
9月7日
9月8日
9月9日
9月10日
9月11日
9月12日
9月13日
9月14日
9月15日
9月16日
9月17日
9月18日
9月19日
9月20日
9月21日
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日