关于jinja2的{{...|safe}}过滤器
原文:https://www.jianshu.com/p/deddb31ab9fe
没有接触过这门语言,不过像很多类似的例子可供参考,如果不对输入过滤,又恰好满足某些条件,是很有可能由于恶意输入导致程序崩溃,甚至用户信息流失的。
最简单的例子是输出HTML,如果对于某些特殊符号不做转移,很容易就会被恶意脚本攻击了。
我猜想这门语言应该对于特定条件下的输入有自动的过滤(an environment with automatic escaping enabled),如果你标记为safe将会将这些过滤器移除掉,降低安全性,所以如果是对外的API,它们的输入的话,没有充足的理由,不应该标记为safe。
jinja2是模板引擎,我现在就是在学用它来做html模板。我之前的想法是这样的:不转义的话不就当做普通的字符串了么,反而应该是安全的。现在看了您的回答,又搜索了一下,是否是这个意思:html中不转义,它也未必会把输入当成普通字符串,实际上有可能当做js指令。html的转义是将标签等元素映射为对应的其他字符,实现一种过滤,从而避免执行一些用户输入的js代码。
Jinja2默认也开启了转义
不带safe的,将内容原样输出
带safe的,是将内容当做html进行解析。
如果一个内容让用户输入的,一个懂程序的用户恶意写入一个死循环框的js代码,然后你还认为这个safe是安全的,网页直接废掉了。
所以一般我们传递给前段模板的,才有可能使用safe,如果是用户输入的内容,进行显示时肯定不会使用safe,直接原样输出。
拓展阅读:Jinja模板的过滤器
过滤器是通过|
符号进行使用的,例如:{{ name|length }}
:将返回name的长度。
abs(value)
:返回一个数值的绝对值。示例:-1|abs
escape(value)
或e:转义字符,会将<、>等符号转义成HTML中的符号。示例:content|escape
或content|e
。
first(value)
:返回一个序列的第一个元素。示例:names|first
last(value)
:返回一个序列的最后一个元素。示例:names|last
。
length(value)
:返回一个序列或者字典的长度。示例:names|length
。
join(value,d=u'')
:将一个序列用d这个参数的值拼接成字符串。
safe(value)
:如果开启了全局转义,那么safe过滤器会将变量关掉转义。示例:content_html|safe
。
replace(value,old,new)
: 替换将old替换为new的字符串。
truncate(value,length=255,killwords=False)
:截取length长度的字符串。
striptags(value)
:删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。
关于jinja2的{{...|safe}}过滤器相关推荐
- 【Flask】Jinja2模板之过滤器
一.过滤器定义 实质上就是一个转换函数.变量可以通过"过滤器"进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数. 常用的过滤器有: 1.字符串过滤器 视图函数 ...
- Flask后端笔记(三)Jinja2模板、过滤器、表单、宏、模板继承、包含
Flask后端笔记 Jinja2模板 基本流程 变量 过滤器 字符串过滤器 支持链式使用过滤器 列表过滤器 自定义过滤器 表单 不使用Flask-WTF扩展时,表单需要自己处理 使用Flask-WTF ...
- Web框架——Flask系列之Jinja2自带过滤器(三)
一.过滤器概述 过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. ...
- 【Flask】jinja2过滤器的使用
使用情景- 遇到一个bug:在数据库中存的数据,取出到前端后自带换行,(导致js中的引号.分号直接被换到下一行),js无法正常读取数据.猜测可能是在数据录入的时候输入了什么特殊符号,但是把数据删掉重新 ...
- 第十阶段 -- Flask框架03:【Jinja2模板01:模板;过滤器;控制语句if for】
文章目录 1. Jinja2模板介绍和查找路径 2. 模板传参及其技巧 3. 模板中使用url_for 4. Jinja2过滤器 1. 基本使用 2. 过滤器介绍 3. default详解 4. 常用 ...
- Flask_day_2渲染Jinja2模板和传参(if判断、for循环、过滤器、继承和block、URL链接)
***Flask渲染Jinja2模板和传参: 1.如何渲染模板 *模板放在'templates'文件夹下 *在'flask'中导入'render_template' *在视频函数中,用'render_ ...
- Python之 jinja2模板浅析
目录 前言 1. jinja2介绍 1.1 jinja2的优点 1.2 安装jinja2 2. jinja2语法 2.1 基本语法 2.2 jinja2变量 2.3 jinja2中的过滤器 3. ji ...
- Flask mysql 模版传参_Flask渲染Jinja2模板和传参
### Flask渲染Jinja2模板和传参: 1. 如何渲染模板: * 模板放在`templates`文件夹下 * 从`flask`中导入`render_template`函数. * 在视图函数中, ...
- Flask框架基础Jinja2模板
Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 文章目录 Flask框架基础Jinja2模板-- 潘登同学的flask学习笔记 return 模板 Template 模板的使用 ...
最新文章
- WPF基础入门 - 1
- 日志库EasyLogging++学习系列(7)—— 记录方式详解
- Zookeeper基于Java 访问
- python:找出两个列表中相同和不同的元素(使用推导式)
- 合格架构师的目标管理
- xp系统打开计算机硬盘分区,XP系统下怎么进行硬盘分区啊?
- resiprocate 之repro使用
- 连接虚机中的mysql服务
- 【Django 2021年最新版教程34】python unittest 对函数单元测试 覆盖率检测
- win10微信卡顿_电脑一分钟小技巧:win10微信电脑端多开方法
- oracle 清理磁盘空间,oracle清理磁盘空间
- 【2020年面经】【通用篇】拿了阿里、滴滴、shopee几家公司offer后的经验总结
- 设计图片转换html5,在HTML5中翻转图片
- seosem是什么意思
- 前端技术的发展和趋势
- PS2018学习笔记(03-18节)
- Linux云计算薪资及发展前景,云计算Linux就业方向及前景分析 2019云计算行业发展现状及前景趋势分析...
- C语言编译器,神奇的魔法师
- 凸优化学习笔记(一)
- 取消UltraEdit查看网页源文件