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

前提是你 提交于 2019-12-03 07:46:55

前言
如果大家想要在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
--------------------- 
作者:sty945 
来源:CSDN 
原文:https://blog.csdn.net/sty945/article/details/81178354 
版权声明:本文为博主原创文章,转载请附上博文链接!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!