2016-10-22 1 views
0

Zum Beispiel, wenn ich etwas tun, wieIst die komplexe lockige Syntax von PHP gefährlich?

$a = "{${phpinfo()}}"; 

phpinfo() wird von im Rahmen dieser Zeichenfolge Erklärung ausgeführt werden. Dies scheint nicht zu passieren, wenn ich $ a = $ _GET ['a'] mache, und setze, dass get var gleich {$ {phpinfo()}} ist. Warum verhält sich das nicht genauso, und bedeutet das, dass die lockige Syntax auf diese Weise nicht gefährlich ist?

+0

Ich sehe nicht, was das mit „lockig Syntax“ zu tun. Ihr Code führt eine Funktion aus, weil Sie es ihm gesagt haben. Sicherlich kann das zu Problemen führen, da jeder einzelne Befehl ausgeführt wird. Sie sollten die vom Client bereitgestellten Daten nicht unbedingt in diese Datei eingeben, wenn Sie das meinen. Aber das gilt auch für jeden Befehl, den Sie ausführen ... – arkascha

Antwort

1

Dies ist nicht gefährlich, da die variable Interpolation nur während der Kompilierungszeit ausgeführt wird. Diese Sequenzen müssen sich physikalisch im Code in einem String mit doppeltem Anführungszeichen/heredoc-Literal befinden. Sie müssten Dateien dynamisch generieren oder eval() verwenden, um sich darum kümmern zu müssen.

0

Das ist das gleiche wie wenn Sie die doppelten Anführungszeichen in einfache Anführungszeichen ändern.

Wenn Sie

$a = 10; 
$b = "$a"; 
$c = '$a'; 
echo "b = $b\n"; 
echo "c = $c\n"; 

haben, dann wird $ b die gleichen wie $ sein ein. während $ c wird $ wird eine buchstäblich

siehe What does ${ } mean in PHP syntax?