Python 模板引擎的注入问题分析
发布时间 - 2026-01-10 22:15:04 点击率:次这几年比较火的一个漏洞就是jinjia2之类的模板引擎的注入,通过注入模板引擎的一些特定的指令格式,比如 {{1+1}} 而返回了 2 得知漏洞存在。实际类似的问题在Python原生字符串中就存在,尤其是Python 3.6新增 f 字符串后,虽然利用还不明确,但是应该引起注意。

最原始的 %
userdata = {"user" : "jdoe", "password" : "secret" }
passwd = raw_input("Password: ")
if passwd != userdata["password"]:
print ("Password " + passwd + " is wrong for user %(user)s") % userdata
如果用户输入 %(password)s 那就可以获取用户的真实密码了。
format方法相关
https://docs.python.org/3/library/functions.html#format
除了上面的payload改写为 print ("Password " + passwd + " is wrong for user {user}").format(**userdata) 之外,还可以
>>> import os
>>> '{0.system}'.format(os)
'<built-in function system>'
会先把 0 替换为 format 中的参数,然后继续获取相关的属性。
但是貌似只能获取属性,不能执行方法?但是也可以获取一些敏感信息了。
例子: http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/
CONFIG = {
'SECRET_KEY': 'super secret key'
}
class Event(object):
def __init__(self, id, level, message):
self.id = id
self.level = level
self.message = message
def format_event(format_string, event):
return format_string.format(event=event)
如果 format_string 为 {event.__init__.__globals__[CONFIG][SECRET_KEY]} 就可以泄露敏感信息。
Python 3.6中的 f 字符串
这个字符串非常厉害,和Javascript ES6中的模板字符串类似,有了获取当前context下变量的能力。
https://docs.python.org/3/reference/lexical_analysis.html#f-strings
>>> a = "Hello"
>>> b = f"{a} World"
>>> b
'Hello World'
而且不仅仅限制为属性了,代码可以执行了。
>>> import os
>>> f"{os.system('ls')}"
bin etc lib media proc run srv tmp var
dev home linuxrc mnt root sbin sys usr
'0'
>>> f"{(lambda x: x - 10)(100)}"
'90'
但是貌似 没有 把一个普通字符串转换为 f 字符串的方法,也就是说用户很可能无法控制一个 f 字符串,可能无法利用,还需要继续查一下。
# python
# 模板注入
# 模板引擎
# python模板引擎
# Python实现的简单模板引擎功能示例
# Python的Flask框架标配模板引擎Jinja2的使用教程
# 深入解析Python的Tornado框架中内置的模板引擎
# 为Python的Tornado框架配置使用Jinja2模板引擎的方法
# Python的Flask框架中的Jinja2模板引擎学习教程
# Python Web开发模板引擎优缺点总结
# 如何用python写个模板引擎
# 还可以
# 尤其是
# 那就
# 还不
# 很可能
# 还需要
# 回了
# 先把
# 这几年
# 转换为
# 中就
# 一个普通
# 就可以
# 最原始
# 而返
# 也就是说
# library
# html
# payload
# functions
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何在不使用负向后查找的情况下匹配特定条件前的换行符
php485函数参数是什么意思_php485各参数详细说明【介绍】
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel如何配置任务调度?(Cron Job示例)
详解vue.js组件化开发实践
大型企业网站制作流程,做网站需要注册公司吗?
如何快速搭建高效简练网站?
如何在香港服务器上快速搭建免备案网站?
js实现点击每个li节点,都弹出其文本值及修改
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何用AWS免费套餐快速搭建高效网站?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
iOS验证手机号的正则表达式
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
高性能网站服务器配置指南:安全稳定与高效建站核心方案
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何在万网开始建站?分步指南解析
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel如何处理文件下载请求?(Response示例)
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何用PHP工具快速搭建高效网站?
JavaScript Ajax实现异步通信
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Linux系统运维自动化项目教程_Ansible批量管理实战
如何为不同团队 ID 动态生成多个“认领值班”按钮
魔方云NAT建站如何实现端口转发?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Android实现代码画虚线边框背景效果
JavaScript如何实现音频处理_Web Audio API如何工作?
如何快速搭建个人网站并优化SEO?
进行网站优化必须要坚持的四大原则
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
如何实现javascript表单验证_正则表达式有哪些实用技巧
制作公司内部网站有哪些,内网如何建网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
canvas 画布在主流浏览器中的尺寸限制详细介绍
济南网站建设制作公司,室内设计网站一般都有哪些功能?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel怎么实现验证码(Captcha)功能

