2016-10-22 25 views
0

例如,如果我这样做PHP的复杂卷曲语法是否危险?

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

phpinfo()函数将这个字符串声明的上下文中执行。当我做$ a = $ _GET ['a']时,这似乎不会发生,并且将var设置为等于{$ {phpinfo()}}。为什么不这样做,这是否意味着曲线语法在这种方式下并不危险?

+0

我看不出有什么这与“卷毛语法”做。你的代码执行一个函数,因为你告诉它。当然,这可能会导致问题,因为你执行的每一个命令。你当然不应该提供客户端提供的数据,如果这就是你的意思。但是对于你执行的每一个命令来说都是如此...... – arkascha

回答

1

这是不危险的,因为变量插值仅在编译期间执行。这些序列必须物理地位于双引号字符串/ heredoc文字内的代码中。您必须动态生成文件或使用eval()才能担心这一点。

0

就像将双引号改为单引号一样。

如果你有

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

然后$ B将是相同为$ a。 而$ C将美元从字面上

看到What does ${ } mean in PHP syntax?