标签:import 存在 展现 http list 用户 现在 sdn 一个
eval()函数a = ‘[1,2,3,4]‘
b = ‘([1,2],[4],"c")‘
c = ‘{2,3,4,5}‘
print(eval(a),type(eval(a)))
print(eval(b),type(eval(b)))
print(eval(c),type(eval(c)))
输出:
[1, 2, 3, 4] <class ‘list‘>
([1, 2], [4], ‘c‘) <class ‘tuple‘>
{2, 3, 4, 5} <class ‘set‘>
想一想这种使用环境:需要用户输入一个表达式,并求值。
由此可知,eval()功能强大,但是存在安全隐患。如果用户恶意输入,例如:
import(‘os‘).system(‘dir‘)
那么eval()之后,你会发现,当前目录文件都会展现在用户前面。
那么继续输入:
open(‘文件名‘).read()
存在所有代码及文件曝光的威胁,如果再进一步删除全部文件,就是哭都找不到地方了!
怎么避免安全问题?
1、自行写检查函数;
2、使用ast.literal_eval:自行查看DOCUMENT
参考及本分拷贝文章:
http://blog.csdn.net/zhanh1218
https://blog.csdn.net/zhanh1218/article/details/37562167
标签:import 存在 展现 http list 用户 现在 sdn 一个
原文地址:http://blog.51cto.com/11575772/2348578