1UnitedPower: PHP Code in externer Datei

Beitrag lesen

Hakuna matata!

Syntax-Highlighting und Precompiler sollten mit Platzhaltern genauso arbeiten, da valides JS erzeugt wird […]

Wird es nicht. Gehen wir von folgendem Template aus:
var foo = '<?= $foo ?>';
Und im PHP:
$foo = "arrr'rrrk";
Das fertig gerenderte Template, sähe dann so aus:
var foo = 'arrr'rrrk';

Pardon, vielleicht hab ich mich nicht klar genug ausgedrückt. Syntax-Highlighting und Precompiler arbeiten doch [...] nicht mit dem fertigen JS für den Client, sondern mit der Variante, in der die Platzhalter noch nicht ersetzt sind.

Man muss sich hier entscheiden, ob das rohe Template bereits valides JS sein soll, oder ob das fertig gerenderte Template valide sein soll. Ich habe versucht zu erklären, dass man nicht beides haben kann, weil man im ersten Fall keine kontextgerechte Maskierung vornehmen kann. Im weiteren Text bin ich dann einfach davon ausgengangen, dass man sich für die kontextgerechte Variante entscheidet.

Ich gebe zu: In meinen beiden Beispielen sollten die Variablen keine String-Delimiter beinhalten. Das stimmt soweit. Die Zeichen ' und " kommen aber bei einfachen Daten kaum vor, meist geht es um alphanumerische Strings mit bestimmten Sonderzeichen (Da die Verwendung von String-Delimitern in Strings aber immer und überall problematisch ist, wird in fast allen Systemen auch konsequent auf deren Einsatz verzichtet).

Hier begibst du dich in eine Welt des Schmerzes. Wenn du Daten nicht entsprechend ihres Zielkontextes behandelst, dann reißt du dir Sichheitslücken auf. In diesem Fall wäre das Risiko keine SQL-Injection, wie in dem xkcd-Comic, sondern eine JavaScript-Injection.

Siehe: Kontextwechseln erkennen und behandeln

Trotzdem: Allgemeine Lösungen sind bekanntlich für einfache Fälle meist overpowered und mit mehr Aufwand als nötig verbunden. Deshalb würde ich für das gegebene Problem nach wie vor die anderen Wege vorziehen.

Allgemine Lösungen sind bekanntlich wiederverwendbar und damit mit weniger Aufwand als möglich verbunden ;)

Ich wollte hier den Punkt deutlich machen, wenn man schon Templates einsetzt, dann bitte richtig und ohne Sicherheitsrisken und ohne obskure Randbedingungen. Ich rate aber weiterhin dringend davon ab, JavaScript-Code genrieren zu wollen und rate stattdessen zu einem gebräuchlichem Daten-Austausch-Format: JSON bietet sich wie gesagt an.

--
“All right, then, I'll go to hell.” – Huck Finn