tobi85: GET = JSON oder SERIALIZE

Hallo,

mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

  1. Tach!

    mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

    Je nach Ziel das eine oder das andere. In Richtung PHP eher serialize(), um Austausch mit anderen Systemen JSON. Und natürlich dazu die passende URL-Kodierung.

    dedlfix.

    1. Hallo,

      mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

      Je nach Ziel das eine oder das andere. In Richtung PHP eher serialize(), um Austausch mit anderen Systemen JSON. Und natürlich dazu die passende URL-Kodierung.

      Ich würde immer JSON nehmen.

      • serialize() hatte in den letzten Jahren einige Sicherheitslücken (Remote Code Execution).
      • Mit JSON bist du zukunftssicher, falls irgendwann mal eine Seite neu implementiert wird in nicht-PHP.

      Viele Grüße, Matti

      1. Tach!

        Ich würde immer JSON nehmen.

        • serialize() hatte in den letzten Jahren einige Sicherheitslücken (Remote Code Execution).
        • Mit JSON bist du zukunftssicher, falls irgendwann mal eine Seite neu implementiert wird in nicht-PHP.

        Das Beispiel, das ich fand, wird sich wohl nicht ganz verhindern lassen. Beim Unserialisieren werden eben auch Objekte von Klassen instantiiert, deren Name mit serialisiert wurde, und dabei wird ein vorhandenes __wakeup() ausgeführt. Der Code dazu muss sich aber bereits im Script befinden. Man kann so also unerwünschte Objekte bestimmter Klassen erstellen und deren __wakeup()-Code ausführen, wenn man die Daten von anderswo entgegennimmt und dabei dem Ersteller traut. Hat man kein __wakeup() in seinen Klassen und auch keine Bibliothek eingebunden, die sowas hat, dann passiert erstmal nichts weiter. Es passiert auch nichts Schlimmes, wenn in den __wakeup()s nichts weiter gravierendes steht. Es kann dann aber in der Folge zu ungewünschtem Verhalten kommen, wenn Methoden der nun falschen Klasse aufgerufen werden (direkte als auch indirekte magische Methoden wie __toString()). Insofern ist ein unsigniertes Übertragen von serialize-Daten über unsichere Wege nicht zu empfehlen.

        Mit JSON passiert sowas deshalb nicht, weil damit immer stdclass-Objekte erzeugt werden. Das hat dann aber auch die Eigenschaft, dass man zu Fuss die Klassen instanttieren muss, die man eventuell eigentlich haben möchte.

        dedlfix.

    2. Hallo,

      würde das so Sinn machen?

      $link=urlencode(base64_encode(serialize($array)));? Perfekt wäre es natürlich, wenn ich das auch noch mit JS auslesen könnte. Wie würdest Du den String codieren mit JSON?

      1. Tach!

        würde das so Sinn machen?

        $link=urlencode(base64_encode(serialize($array)));?

        Abgesehen von den vorgetragenen Sicherheitsbedenken ist eine Base64-Kodierung nicht notwendig. urlencode() kümmert sich bereits um alle Zeichen mit Sonderbedeutung im URL-Kontext.

        Perfekt wäre es natürlich, wenn ich das auch noch mit JS auslesen könnte. Wie würdest Du den String codieren mit JSON?

        In Javascript kann man serialize()-Daten nur zu Fuß dekodieren. Für JSON hingegen gibt es eingebaute Parser.

        dedlfix.

  2. Hallo,

    mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

    Enctype application/x-www-form-urlencoded was denn sonst!

    1. Tach!

      mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

      Enctype application/x-www-form-urlencoded was denn sonst!

      Wie bekommst du das Array in eine dafür geeignete Form?

      dedlfix.

      1. Tach!

        mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

        Enctype application/x-www-form-urlencoded was denn sonst!

        Wie bekommst du das Array in eine dafür geeignete Form?

        Guckst Du RFC. Und beachte die Besonderheit von PHP, da braucht der Parser spezielle Parameternamen[].

        PS: Das müsstest Du aber eigentlich wissen, bis doch lang genug im Geschäft oder!?

        Und nochwas: Wer hier -- gibt, ist wohl eher ein Anfänger. Meine Güte, das Niveau hier ist mächtig abgesunken.

        1. Tach!

          mal eine Frage - was würdet Ihr nehmen um mit GET einen Array zu übergeben? JSON oder SERIALIZE?

          Enctype application/x-www-form-urlencoded was denn sonst!

          Wie bekommst du das Array in eine dafür geeignete Form?

          Guckst Du RFC. Und beachte die Besonderheit von PHP, da braucht der Parser spezielle Parameternamen[].

          PS: Das müsstest Du aber eigentlich wissen, bis doch lang genug im Geschäft oder!?

          Das Format ist mir durchaus bekannt. Ich wollte eigentlich den Weg von dir beschrieben haben. Ich denke aber, du meinst, dass du zu Fuß das Array mit all seinen möglichen Tiefen durchlaufen möchtest, um daraus eine serialisierte Form zu erzeugen. Für PHP mit seinem $_GET ist das noch recht einfach zu lesen. Auf Javascript-Seite fängt man dann aber an, den Querystring zu Fuß auseinanderzunehmen. Kann man machen, wenn man Rentner ist und sonst nichts zu tun hat. Der Rest nimmt wohl lieber JSON als fertige Lösung.

          dedlfix.