【php】eval

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的菜刀基本是同一个意思

所以,基本上,你看到大部分网站的上传的地方都做了文件上传类型的识别。

猜你喜欢

转载自my.oschina.net/u/3776619/blog/1805172