molily: PHP json_encode - kontextspezifisches Escaping

Beitrag lesen

<?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 ?>;`{:.language-javascript}  
> </script>[/code]  
>   
> (Ungetestet, ich weiß nicht, ob das so herum überhaupt geht.)  
  
Getestet, ist anscheinend »sicher«, aber erzeugt ebenfalls einen Syntaxfehler. Ausgabe:  
  
`var obj = \x7B\x22foo\x22\x3A\x22user\x2Dprovided\x20string,\x20arbitrary\x20data,\x20e.g.\x20\x24_GET\x5B\x5C\x22something\x5C\x22\x5D\x22\x7D;`{:.language-javascript}  
  
Das ist natürlich kein gültiges JavaScript. Wie denken sich die Zend-Leute das? Kann escapeJs für solche Fälle verwendet werden? Es kann nicht sein, dass ich die Werte \*vor\* der JSON-Serialisierung mit escapeJs behandle. Dann kommen gültige Wert verstümmelt im JavaScript an.  
  
Ich wüsste hier keine Lösung. Daher wies ich darauf hin, JSON stattdessen [in ein Attribut oder Element](https://forum.selfhtml.org/?t=217757&m=1496873) auszugeben. Das scheint wohl Best Practice zu sein, siehe das [OWASP XSS Prevention Cheat Sheet](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.233.1_-_HTML_escape_JSON_values_in_an_HTML_context_and_read_the_data_with_JSON.parse).  
  
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