4 ms·
I understand the risk is basically because you're evaling when unpickling. What formats are safe then?
by jonesetc 13y ago
I understand the risk is basically because you're evaling when unpickling. What formats are safe then?
- jknupp 13y agoPickle (or any use of eval) is a security risk only if you're using it in the context of untrusted code. Basically any distributed task queue is going to have that risk if it can execute arbitrary code.
- michaelmior 13y agoPickle doesn't really use eval, but there is still the potential for users to execute arbitrary code[1]. JSON, YAML, MessagePack, etc are safe in this respect (assuming a well-implemented parsing library) because all the parser does is convert the data into simple data structures. [1] http://lincolnloop.com/blog/playing-pickle-security/ http://lincolnloop.com/blog/playing-pickle-security/
- jonesetc 13y agoI was just using eval loosely. The eval I particularly meant is that an __init__ is run for classes with a .__getinitargs__ method defined [1]. And I guess json et al. is the reasonable answer I should have expected. I was hoping for something that mimicked the functionality of pickle but maybe signed the information so that it would be safe to use across a network. http://docs.python.org/2/library/pickle.html#object.__getinitargs__ http://docs.python.org/2/library/pickle.html#object.__getini...
- deleted 13y ago[deleted]
- ForHackernews 13y agoPython's YAML implementation isn't safe by default. You have to use yaml.safe_load() because the standard load() function can execute arbitrary code.
- thwest 13y agoI use JSON and protobuf