PHP kód se pošle na výstup

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pmg
Člen | 372
+
0
-

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
+
0
-

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.

Tomik
Nette Evangelist | 485
+
0
-

pmg napsal(a):

Dělám teď v Nette na jedné přelomové aplikaci (…)

OT: Na jaké? :) Jinak zdravím!

pmg
Člen | 372
+
0
-

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. :-)

pmg
Člen | 372
+
0
-

No nic, přiznávám, že se to moc nezdařilo. Prostě šlo o to, že ten kód vypíše sám sebe. Alespoň si ho dám do signatury. :-)

Ondřej Mirtes
Člen | 1536
+
0
-

Takže to měl být apríl? :o)