Hello,
<?php ### buecher.js.php ###
header('Content-Type: Text/Javascript; Charset=utf-8');
session_start();
echo 'var buecher = new Array("' . implode('","', $_SESSION['buecher']) .'");' . PHP_EOL;
?>In dem Code ist keinerlei kontextgerechtes Escaping drin! Er ist gefährlich! Bitte nicht benutzen!
Bitte nicht nur meckern, sondern zeigen, wie es geht!
Du müsstest dafür nur über eine halbe Zeile diskutieren.
Hier ging es erstmal nur um das Verfahren. Das Escaping notwendig ist, hat dedlfix schon ziemlich am Anfang geschrieben.
Was müssen wir also escapen? Das zu diskutieren, wäre doch wünschenswert!
Denn hier ist ein "htmlspecialchars()" fehl am Platze, obwohl die Daten auch indirekt in den HTML-Kontext gestellt werden.
Ein Beispiel, warum und wie das notwendig sein könnte, hat Mathias gezeigt:
https://forum.selfhtml.org/?t=217757&m=1496841
Das trifft aber nicht alles auf die Variablen und die Bezichner (Keys) in diesem Besipiel zu.
Also escapen oder verhindern:
-
Quotations
-
Ecapezeichen (Backslashes)
-
etliche nicht druckbare Zeichen (Steuerzeichen)
-
geschweifte Klammern (?)
-
Werte quotieren (!)
-
Bezeichner quotieren (?)
-
und was noch alles?
Welche Zeichen sind in JavaScript-Bezeichnern zulässig?
Da es hier um die Erzeugung von Arrays bzw. Objekten geht, beträfe dies die Elementbezeichner. Der Variablenbezeichner wird vom Programmierer vorgegeben.
Außerdem muss vor dem Zugriff auf das Subarray im $_SESSIONS-Array sel
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg