python eval用法总结

引言
  • 最近看相关源码,总是看到eval的用法,这个命令可以用来执行任意的代码段,但是需要审用,功能强大的同时,就是会有漏洞。
  • 总结了一下,主要有两类用法,但是每一类用法都有与之相对应的替代方法,也算是有多种选择了吧!
第一类用法:将一些dict|list|tuple等格式的字符串转为对应的数据结构
# 直接用法,但是这样不太安全
>>> dic_string = {'muffin' : 'lolz', 'foo' : 'kitty'}
>>> eval(dic_string)

# 替代用法
>>> import ast
>>> ast.literal_eval(dic_string )
{'muffin': 'lolz', 'foo': 'kitty'}
  • 其中关于ast.literal_eval只能将提供的字符串或者节点转化为python内置结构:strings, bytes, numbers, tuples, lists, dicts, sets, booleans, None. 原文链接
第二类用法:动态执行函数
# eval用法 
from hashlib import * # added for clarification
def get_hash(self):
        if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
            data = eval(self.hash_type) # <--- how can I replace this?

# 替代较为安全写法
import hashlib
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
     func = getattr(hashlib, self.hash_type)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值