python3 eval安全替代函数ast.literal_eval

news2023/12/2 7:29:27

一、eval函数

eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果。

示例:

>>> s='8*8'
>>> eval(s)
64
>>> eval('2+5*4')
22
>>> x=1
>>> y=4
>>> eval('x+y')
5
>>> eval('98.9')
98.9
>>> eval('9.9\n')
9.9
>>> eval('9.9\n\t\r  \t\r\n')
9.9

最有用的一个是eval可以将字符串转换成字典,列表,元组

>>> l = "[2,3,4,5]"
>>> ll=eval(l)
>>> ll
[2, 3, 4, 5]
>>> type(ll)
<type 'list'>
>>> d="{'name':'python','age':20}"
>>> dd=eval(d)
>>> type(dd)
<type 'dict'>
>>> dd
{'age': 20, 'name': 'python'}
>>> t='(1,2,3)'
>>> tt=eval(t)
>>> type(tt)
<type 'tuple'>
>>> tt
(1, 2, 3)

eval()函数功能强大,但也很危险,若程序中有以下语句:

s=input('please input:')
print (eval(s))

下面举几个被恶意用户使用的例子:

1、运行程序,如果用户恶意输入:

please input:__import__('os').system('ls')

eval()之后,当前目录文件都会展现在用户前面。
演示结果:

2、运行程序,如果用户恶意输入:

please input: open('xxx.py').read()

如果,当前目录中恰好有一个文件,名为data.py,则恶意用户变读取到了文件中的内容。

3、运行程序,如果用户恶意输入:

please input:__import__('os').system('del test.txt /q')

如果,当前目录中恰好有一个文件,名为test.txt,则恶意用户删除了该文件。/q :指定静音状态。不提示您确认删除。

 

二、ast.literal_eval方法

ast.literal_eval是python针对eval方法存在的安全漏洞而提出的一种安全处理方式。

简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的Python类型,如果是则进行运算,否则就不进行运算。

比如下面查看系统文件的操作就会被拒绝,而只会执行合法的python类型,从而大大降低了系统的危险性
 

import ast

res = ast.literal_eval('1 + 1')
print(res)
# 2

res = ast.literal_eval('[1, 2, 3, 4]')
print(type(res))
# <class 'list'>

print(res)
# [1, 2, 3, 4]


res = ast.literal_eval("__import__('os').system('ls')")
# 报错如下:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/didi/.pyenv/versions/3.6.4/lib/python3.6/ast.py", line 85, in literal_eval
    return _convert(node_or_string)
  File "/Users/didi/.pyenv/versions/3.6.4/lib/python3.6/ast.py", line 84, in _convert
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Call object at 0x10e63ca58>

所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://nwjs.net/news/299908.html

如若内容造成侵权/违法违规/事实不符,请联系七分地网进行投诉反馈,一经查实,立即删除!

相关文章

coreldraw水涟漪怎么做_排骨不论怎么做,都“别先焯水”,记住这2点,排骨鲜嫩无腥味!...

大家好&#xff0c;我是小张&#xff0c;今天小张来教大家做排骨&#xff0c;肉品是不能离开我们人类的&#xff0c;毕竟天天吃素的话&#xff0c;那多没有营养啊&#xff0c;我们的适当买一些肉来食用&#xff0c;及时补充人体的营养。在众多肉类中&#xff0c;猪肉是我们平日…

Git常用命令总结(超实用)

导读Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。一般来说&#xff0c;日常使用Git只要记住下图6个命令&#xff0c;就可以了。但是熟练使用&#xff0c;恐怕要记住60&#xff5e;100个命令。下面是我整理的常用 Git 命令清单。…

服务器画热图显示无效的变量,使用pheatmap包绘制热图

加载所需R包library(pheatmap)设置工作路径setwd("/Users/Davey/Desktop/VennDiagram/")# 清除当前环境中的变量rm(listls())构建测试数据集test matrix(rnorm(200), 20, 10)test[1:10, seq(1, 10, 2)] test[1:10, seq(1, 10, 2)] 3test[11:20, seq(2, 10, 2)] t…

QQ圈子:从哪里来,到哪里去

2019独角兽企业重金招聘Python工程师标准>>> 摆脱顿巴数的魔咒 社 交是人类的一个最基本的需求。但是&#xff0c;自然给我们人类的大脑&#xff0c;只能让我们维系150-200个左右的好友。超出这个范围&#xff0c;就会有好友慢慢地被淡忘。很多社会 群体的平均大小是…

sap系统搭建教程_Nios ii最小系统搭建教程

本教程以最小系统的概念为切入点&#xff0c;详细演示最小系统搭建的每一个步骤&#xff1b;外加嵌入式IP CORE详细的理论剖析和详细的实践演示&#xff0c;提供部分工程集源码下载链接。本手稿为实践总结&#xff0c;只是提供了一个思路&#xff0c;比如&#xff0c;驱动都是基…

旷视5号员工陈可卿:1991生于绍兴、10岁买电脑改变命运,信息奥赛金牌保送清华...

允中 发自 融科资讯中心 量子位 出品 | 公众号 QbitAI陈可卿&#xff0c;28岁&#xff0c;旷视创始员工&#xff0c;工号No.5。他生于1991年&#xff0c;曾是信息学奥赛金牌选手&#xff0c;高中保送进清华。大二以实习生身份进旷视&#xff0c;是创始员工之一&#xff0c;实习…

Jquery--遮罩弹窗特效

/*! jQuery v1.7.2 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var bc.body,df("<"a">").appendTo(b),ed.css("di…

怀旧服湖畔镇服务器位置,《魔兽世界怀旧服》今天再开10组新服 47组服务器免费转服开启...

原标题&#xff1a;《魔兽世界怀旧服》今天再开10组新服 47组服务器免费转服开启为了进一步缓解服务器压力《魔兽世界怀旧服》官方今天再次开放10组新服务器&#xff0c;同时前段时间承诺的47组服务器的免费免费角色转移服务也在今天上线了。《魔兽世界怀旧服》开服至今服务器的…

万分之二用百分之怎么表示_2020年元旦放假通知!周三放1天!不挪假连休,你打算怎么安排?...

2020年元旦放假安排通知根据国务院办公厅通知精神&#xff0c;现将2020年元旦放假安排通知如下&#xff1a; 2020年1月1日(星期三)放假1天。请广大市民提前安排好工作生活&#xff0c;节日期间注意安全&#xff0c;度过一个欢乐、祥和的节日假期。对于这样的安排不少网友表示既…

泉州服务器维修,泉州云服务器

泉州云服务器 内容精选换一换华为云云服务器备份视频帮助&#xff0c;为用户提供创建云服务器备份和使用云服务器备份恢复云服务器等操作视频&#xff0c;帮助您快速上手使用云服务器备份。登录华为云官网&#xff0c;选择“控制台”。选择弹性云服务器所在的区域。选择“计算 …

特斯联再获20亿元融资,跻身AIoT独角兽,光大京东讯飞万达入股

雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAIAIoT领域玩家特斯联&#xff0c;成为新晋独角兽。今日&#xff08;8月12日&#xff09;&#xff0c;特斯联宣布完成C1轮融资。本轮融资金额为20亿元人民币&#xff0c;由光大控股领投&#xff0c;京东、科大讯飞、万达投资等跟投。…

esnext:最后一个参数后面也允许加逗号了

https://jeffmo.github.io/es-trailing-function-commas 目前是一个 stage 3 的提案&#xff0c;Chakra 和 JSC 已经实现了&#xff0c;它允许我们在函数定义时的最后一个形参和函数调用时的最后一个实参的尾部加上逗号。 最后一个参数加上逗号有什么优点&#xff1f; 注意&…

Ov

Ov posted on 2016-10-21 17:31 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5985472.html

Linux文件系统只读Read-only file system

问题描述:1、系统无法进行磁盘的读写操作&#xff08;touch,cp,chmod&#xff09;等等2、服务器无法启动&#xff08;也是因为无法创建文件&#xff09;3、只有涉及到系统磁盘的写操作&#xff0c;都会报错"Read-only file system"问题原因&#xff1a;1、系统没有正…

怎么用u盘在服务器上传文件,U盘向云服务器传输文件吗

U盘向云服务器传输文件吗 内容精选换一换使用云服务器备份创建镜像后&#xff0c;通过创建成功的镜像创建云服务器&#xff0c;但登录云服务器后提示系统进入维护模式&#xff0c;无法正常使用云服务器。当云服务器带有数据盘的时候&#xff0c;恢复后的云服务器中的系统盘/etc…

五行代码玩转GPT-2,新加坡高中生开源轻量级GPT-2“客户端”

鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAIOpenAI会讲故事的文本生成模型GPT-2&#xff0c;现在有了更易用的封装版本。轻松上手&#xff0c;轻量级&#xff0c;速度快。这就是这只名叫gpt2-client的包装器的突出特性。作者小哥 Rishabh Anand 表示&#xff0c;gpt2-client…

什么叫取反_转载:CodeReview正确的姿势是什么?

作者&#xff1a;微博是阿里孤尽链接&#xff1a;https://www.zhihu.com/question/383079175/answer/1109655276来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。CodeReview正确的姿势是什么&#xff1f;​www.zhihu.com全…

GitHub免费支持CI/CD了,开发测试部署高度自动化,支持各种语言,网友:第三方凉凉...

郭一璞 栗子 发自 凹非寺量子位 出品 | 公众号 QbitAIGitHub激动地宣布&#xff0c;终于支持CI/CD了。CI\CD&#xff0c;全称&#xff1a;持续集成 (Continuous Integration) &#xff0c;持续部署 (Continuous Deployment) &#xff0c;是开发流程的自动化利器&#xff0c;如今…

iOS开发③UIView

UILabel Lable的作用是显示不可编辑的文字。 属性检查器 Text&#xff1a;Label显示的文字Color&#xff1a;文字的颜色Font&#xff1a;字体和字号Alignment&#xff1a;文本的对齐方式Lines&#xff1a;设置Label中文本的行数&#xff0c;默认为1 Line Breaks&#xff1a;设置…

linux下的几种隐藏技术

0x00 前言 攻击者在获取服务器权限后&#xff0c;会通过一些技巧来隐藏自己的踪迹和后门文件&#xff0c;本文介绍Linux下的几种隐藏技术。 0x01 隐藏文件 Linux 下创建一个隐藏文件&#xff1a;touch .test.txt touch 命令可以创建一个文件&#xff0c;文件名前面加一个 点…