eval函数与php短标签与反引号命令执行
前言
<?php
eval('?><?=`dir`;?>');
?>
注:因为博主在Windows环境进行测试,因此这里使用dos指令
探究这段语句的执行原理
- eval()函数的插入机制
- 反引号的作用情况
- 短标签
<?=
的运用 - 分号与结束符
?>
的不同
eval()函数
我们知道,eval函数的作用是把字符串作为PHP代码执行
eval ( string $code )
code是需要被执行的字符串
但是值得注意的是:
代码不能包含打开/关闭 PHP tags。比如,
'echo "Hi!";'
不能这样传入: '<?php echo "Hi!"; ?>'
。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'
。
除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如 'echo "Hi!"'
会导致一个 parse error,而 'echo "Hi!";'
则会正常运行。
return
语句会立即中止当前字符串的执行。