molily: PHP json_encode - kontextspezifisches Escaping

Beitrag lesen

Hallo,

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

Ein Framework-Escaper muss nicht nur funktionieren, wenn alles richtig gemacht wurde, sondern immer - auch wenn wissentlich oder unwissentlich Dinge falsch gemacht wurden, überdies auch, wenn angreifbare Browser ins Spiel kommen.

Ja, das ist richtig. Aber wer eine Seite als application/xhtml+xml ausliefert, wird noch viele weitere Probleme bekommen, einige davon können sich zu Sicherheitslücken ausdehnen. Da ist das korrekte Escaping von generiertem JavaScript in script-Elementen noch das kleinere Problem. Es fängt schon dabei an, dass PHP Stringketten verknüpft, was eine denkbar schlechte Art und Weise ist, wohlgeformtes XML zu produzieren.

Es stört mich auch nicht, dass der Escaper XHTML berücksichtigt, sondern dass dieses Beispiel wie stillschweigend den XML-Parser anschaltet und es als üblichen Fehler darstellt. Das ist doch arg konstruiert. Verarbeitung als XML ist eher der Edge-Case und lenkt davon ab, dass das Einbetten von JSON in <script> bei text/html ebenfalls problematisch ist (s.a. mein anderes Posting).

Wie es aussieht, ist obige Seite veraltet und wurde durch eine Reihe von neuen Beispielen ersetzt. Da kommt XHTML gar nicht mehr vor:

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

(Tami hatte an anderer Stelle schon auf die neue Version hingewiesen, glaube ich.)

Ich find das »Example of Good Javascript Escaping« immer noch verwirrend, denn es produziert nach wie vor einen Syntaxfehler (»In the above example, the Javascript parser will most likely report a SyntaxError, but at least the targeted application remains safe from such attacks.«).

Was soll die Aufgabenstellung sein? Ziel sollte doch sein, immer syntaktisch validen Code zu produzieren. Eine Seite durch Eingaben gezielt »kaputt« zu machen ist ein DoS-Angriff, der verhindert werden muss.

Ein besseres Beispiel wäre: Man will eine PHP-Objektstruktur an JavaScript übergeben.

<?php  
[code lang=php]$obj = new stdClass();  
$obj->foo = 'user-provided string, arbitrary data, e.g. $_GET["something"]';  
$json = json_encode($obj);  
$escaper = new Zend\Escaper\Escaper('utf-8');  
$output = $escaper->escapeJs($json);

?>
<script>
var obj = <?php echo $output ?>;
</script>[/code]

(Ungetestet, ich weiß nicht, ob das so herum überhaupt geht.)

Ziel ist hier, dass das immer funktioniert, keine Syntaxfehler erzeugt und sämtliche Eingaben ohne XSS sauber in ein JavaScript-Objekt überführt.

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