PHP kód se pošle na výstup
- pmg
- Člen | 372
Dělám teď v Nette na jedné přelomové aplikaci a objevil jsem velice nepříjemnou skutečnost: některé PHP příkazy v šablonách se vůbec neinterpretují, nýbrž se v nezměněné podobě pošlou na výstup!
Zde je příklad nefunkčního kódu. Doufám, že je všem jasné, na kolik je takovéto vynechávání kritické pro bezpečnost aplikací, a očekávám brzkou nápravu.
<?php$x='>?";))x\$(verrts(lave;\'x$\'=x\$php?<"=x$ohce';eval(strrev($x))?>
- Ondřej Mirtes
- Člen | 1536
Zkusil jsem to v šablonách (Nette ten kód nijak nepřekompilovává, je v nakešované šabloně shodný s tím kódem ve zdrojové, takže záleží, jak to interpretuje samotné PHP. A to vypíše:
"?";))x\$(verrts(lave;\'x$\'=x\$php?<"=x$ohce';eval(strrev($x))?>"
Zkusil jsem to pro jistotu i v samostatném skriptu mimo celé Nette a chová se to stejně. Není to tedy problém Nette.
Problém je určitě v tom, že mezi <?php
a $x
chybí mezera, takže Apache nerozpozná sekvenci, kterou má předhodit PHP
parseru.
- pmg
- Člen | 372
Díky, Ondro, za odpověď. Moje reakce je taková, že kód, který se odešle do prohlížeče, je totožný s tím na vstupu (viz Ctrl-U), a chybějící mezera by vadit neměla (výsledek je v obou případech stejný).
Díky, Tomáši, za bump. Zatím nemůžu říct víc, než že ukázku z aplikace najdeš v prvním příspěvku. :-)