建议使用更加安全的ast.literal_eval去替代eval

前言
如果大家想要在python中将字符串转换成列表,数字,字典等操作,都会想到使用eval(),确实这个函数很好用,但是它却存在一定的安全性

eval的漏洞
如果用户使用如下的代码

open(r’D://filename.txt’, ‘r’).read()

import(‘os’).system(‘dir’)

import(‘os’).system(‘rm -rf /etc/*’)
1
2
3
4
5
eval就会不管三七二十一,显示你电脑目录结构,读取文件,删除文件……如果是格盘等更严重的操作,她也会照做不误!
更详细的情况可以参考这里

如何避免这个漏洞
可以使用ast.literal_eval,这个函数具有同样的eval()的功能,但是会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。
stackoverflow中的解释

参考
https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
https://blog.csdn.net/Jerry_1126/article/details/68831254
https://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval
https://blog.csdn.net/whatday/article/details/102747599
http://www.360doc.com/content/21/0101/22/30155531_954742858.shtml
https://www.cnblogs.com/hyhyhy/articles/10225779.html
https://www.shangmayuan.com/a/80fb9dedae6b48b9ae081be9.html
https://blog.csdn.net/m0_37578088/article/details/102469854

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值