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