Angriff Python ' s pickle

Schreibe ich eine web-app, speichert die Benutzereingaben in ein Objekt. Dieses Objekt wird gebeizt.

Ist es möglich für einen Benutzer, um Handwerk schädliche Eingaben, die etwas tun könnten ungeheuerlich, wenn das Objekt unpickled?

Hier ist eine wirklich basic-code-Beispiel ignoriert, dass wunderbare Prinzipien wie Kapselung, sondern verkörpert das, was ich sehe:

import pickle

class X(object):
    some_attribute = None

x = X()
x.some_attribute = 'insert some user input that could possibly be bad'

p = pickle.dumps(x)

# Can bad things happen here if the object, before being picked, contained
# potentially bad data in some_attribute?
x = pickle.loads(p)
  • Ist es nur ein string? Nein, es ist sicher. Ist es ein willkürliches Objekt? Sie betcha, kann es tun schlechte Sachen.
  • +1 das ist eine ausgezeichnete Frage
  • Gurke.Lasten(p) behandelt eine Zeichenkette als ein willkürliches Objekt, obwohl
  • Ich bin nicht allzu besorgt darüber, da mein code nur unpickle Daten, die zuvor gebeizt, es ist nur eine Sorge, ob die Daten in das Objekt, das übergeben wurde, in der von einem bösartigen Benutzer über das öffentliche web-interface kann irgendwie überlisten pickle.loads() zu handeln wie ein böser eval() beliebigen code auszuführen oder machen einige andere gute.
  • ja, ich möchte sagen, @Not_a_Golfer ist richtig, aber Sie wollen sehr vorsichtig sein hier. Es gibt viel Platz für Tricks
InformationsquelleAutor Matty | 2012-04-23
Schreibe einen Kommentar