molily: PHP json_encode - kontextspezifisches Escaping

Beitrag lesen

Hallo,

Und http://framework.zend.com/manual/2.1/en/modules/zend.escaper.escaping-javascript.html

Da steht aber ziemlicher Quatsch.

Das erste Beispiel ist kein XSS, zumindest nicht in neueren Browsern. Denn Zeichenreferenzen werden in script-Elementen nicht vom HTML5-Parser umgesetzt, sondern wörtlich an den JS-Interpreter weitergegeben. War auch so in HTML 4 definiert.

Die Sicherheitslücke wird wahrscheinlich erst dadurch geschaffen, dass das Dokument als XHTML ausgeliefert wird:

<?php header('Content-Type: application/xhtml+xml; charset=UTF-8'); ?>

Das sollte man tunlichst unterlassen! Schön bei text/html bleiben und den HTML5-Parser nutzen.

Es ist aber richtig, dass json_encode NICHT ausreicht für das Einbetten von Daten in ein script-Element. htmlspecialchars kann nämlich nicht angewandt werden, weil Zeichenreferenzen wie gesagt ignoriert werden.

In der JSON-Serialisierung kann </script><script>alert('XSS')</script> vorkommen, was das script-Element beendet und Code einschleust. Man müsste hier in JSON-strings </script> durch </script> ersetzen. Das ist aber sehr aufwändig und fehlerträchtig.

Soweit ich weiß (ich bin KEIN Sicherheitsexperte), bettet man JSON daher besser in Elemente oder Attribute ein, nicht in <script>…</script>. Dort kann nämlich normales HTML-Escaping angewandt werden.

Das zweite, vermeintlich sichere Beispiel auf der Zend-Seite verstehe ich nicht. Da wird syntaktisch fehlerhafter JavaScript-Code generiert. Was ist überhaupt das Ziel? Ein String an JavaScript zu übergeben geht viel einfacher. Da würde ich eher einen HTML-Sanitizer wie HTML Purifier verwenden.

Mathias

0 48

PHP array an javascript function übergeben

javascriptnewbie
  • javascript
  1. 0
    dedlfix
  2. 0
    Der Martin
    1. 0
      molily
    2. 0
      javascriptnewbie
      1. 0
        M.
        1. 0

          Gute Idee

          Tom
          • menschelei
      2. 1
        ChrisB
        1. 0
          javascriptnewbie
          1. 0
            molily
            1. 0
              javascriptnewbie
              1. 0
                M.
              2. 6
                molily
      3. 0
        Tom
        1. 0
          javascriptnewbie
          1. 0
            Tom
            1. 0
              Sven Rautenberg
              1. 0

                Nicht nur meckern, zeigen! Escaping für JavaScript-Variablen

                Tom
                1. 0
                  molily
                  1. 0
                    tami
                    1. 0
                      molily
                      1. 0
                        tami
                  2. 0
                    Tom
                    1. 0
                      molily
              2. 0

                PHP json_encode - kontextspezifisches Escaping

                tami
                1. 0
                  tami
                  1. 0
                    molily
                    1. 0
                      Sven Rautenberg
                      1. 0
                        molily
                        1. 0
                          molily
                        2. 0

                          JSON in HTML einbetten

                          molily
                          1. 1

                            JSON in HTML einbetten - RoR "vs" ZF

                            tami
                            1. 0
                              tami
                              1. 0
                                Tom
                                1. 0
                                  molily
                            2. 0
                              molily
                              1. 0
                                tami
                                1. 0
                                  tami
                              2. 0

                                JSON-Paket mit composer vom Zend Framework holen

                                tami
                              3. 2

                                JSON in HTML einbetten

                                molily
                                • php
                          2. 0

                            Reihenfolge der Auswertung?

                            Tom
                            1. 0
                              tami
                            2. 0
                              tami
                            3. 0

                              Reihenfolge der Auswertung? Codierung, kleine Korrektur

                              Tom
                            4. 0
                              molily
                              1. 0
                                Tom
                                1. 0
                                  molily
                  2. 0
                    Tom