Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: pickle onveilig in python3?  (gelezen 868 keer)

Offline MKe

  • Lid
pickle onveilig in python3?
« Gepost op: 2014/10/17, 13:34:12 »
Het is wel bekend dat pickle onveilig is. Op de python website staat:
Citaat
Flying Pickle Alert!

Pickle files can be hacked. If you receive a raw pickle file over the network, don't trust it! It could have malicious code in it, that would run arbitrary python when you try to de-pickle it.

However, if you are doing your own pickle writing and reading, you're safe. (Provided no one else has access to the pickle file, of course.)

You might also check out http://trustedpickle.sourceforge.net/ if you want to generate pickles, and later verify that you were the one that generated the pickle (e.g., if you are putting a pickle in a hidden field).

Maar is dit nog steeds zo in Python3.4? In Python2.7 werkt het volgende:
>>> import pickle; pickle.loads("cos\nsystem\n(S'whoami'\ntR.")
mke
De code is dus uitgevoerd (laat mijn usernaam zien).

Bij python3.4 echter:
>>> import pickle; pickle.loads("cos\nsystem\n(S'whoami'\ntR.")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' does not support the buffer interface

Het lijkt er dus op dat pickle in python3 veiliger is, of zijn er nog andere veiligheidsgaten?

Re: pickle onveilig in python3?
« Reactie #1 Gepost op: 2014/10/17, 18:41:56 »
>>> import pickle; pickle.loads(b"cos\nsystem\n(S'whoami'\ntR.")
timo

Ow, toch niet veiliger :-)

Het verschil zit in de strings tussen Python2 en Python3. In Python2 is de standaard str een bytestring en in Python3 een unicode string. pickle.loads() verwacht blijkbaar een bytestring en geeft een error.
Er is dus helemaal niets veranderd in pickle zelf.

Afhankelijk van wat er bewaard moet blijven zijn er andere en betere oplossingen dan pickle.

Offline MKe

  • Lid
Re: pickle onveilig in python3?
« Reactie #2 Gepost op: 2014/10/24, 22:29:22 »
Hmmm, jammer. Pickle kan zo lekker handig zijn, maar ik ga het dan maar niet voor dit project gebruiken. Met Json moet je altijd zoveel meer code schrijven om je objecten te definieren.