Flask模板渲染数据库取出的HTML<br>标签未生效换行如何解决
问题原因
这是模板引擎的默认安全机制导致的:绝大多数现代模板引擎默认开启HTML自动转义,会把内容中的<、>等特殊字符转义为<、>这类HTML实体,避免XSS注入攻击,所以浏览器不会把内容里的<br>识别为HTML换行标签,只会当成普通文本输出。
解决方案
不要关闭全局HTML转义(会带来严重的安全风险),仅针对当前你确认内容安全的字段,单独开启HTML内容解析即可,不同模板引擎的写法如下:
- Jinja2(Python Flask/Django生态常用):使用
safe过滤器{{ row['data'] | safe }} - Vue:使用
v-html指令<div v-html="row.data"></div> - React:使用
dangerouslySetInnerHTML属性<div dangerouslySetInnerHTML={{__html: row.data}} /> - Thymeleaf(Java生态常用):使用
th:utext属性<div th:utext="${row.data}"></div> - Smarty(PHP生态常用):使用
nofilter修饰符{$row.data nofilter}
注意事项
关闭字段转义后会存在XSS注入风险,请确保该字段的所有内容都是完全可控的,如果内容包含用户提交的部分,需要提前做安全过滤,仅放行<br>这类你允许的标签,拦截所有恶意脚本标签。
内容的提问来源于stack exchange,提问作者Abhi4mu
相关产品推荐
相关产品推荐

