PHP:如何禁用危险功能

xquis 发布于 2019-11-10 php 最后更新 2019-11-10 12:10 230 浏览

我怎样才能禁用危险的eval函数?这可以使用ini_set函数完成吗? 还有如何禁用以下功能?我们可以使用ini_set函数禁用它们吗?

allow_url_fopen  
allow_url_include
exec
shell_exec
system
passthru
popen
stream_select
eval是坏人可以用来利用这些东西的最危险的功能之一。应该有一种机制来禁用,而不诉诸于php.ini文件;但应该以编程方式完成。 那么,我正在寻找一个答案,建议禁用这些危险的可爱的同伴而不去php.ini文件;我的意思是如何禁用它们在运行时或编程? 提前致谢.... 更新 有没有人听说过PHP Shell Offender Script?它主要使用eval函数进行攻击。黑客能够在您的网站上运行他们的PHP代码。 我的问题是,我不想从php.ini文件中完全禁用eval函数。例如,我开发了自己的MVC框架。现在,框架用户可以从框架配置文件中指定是否应该禁用eval(和其他)函数。所以这是留给框架用户的选择。一旦他们指定禁用它;我应该能够以编程方式禁用eval函数。 那就是这种情况。寻找有用的答案/解决方案。 再次感谢。
已邀请:

rqui

赞同来自:

内容太长未翻译

nautem

赞同来自:

简而言之:你做不到。 但我认为你并不真正了解eval和这些功能是如何被利用的。当程序员没有正确清理传递给他们的ARGUMENTS时,就会出现问题。 您提到的php shell offender脚本只是一个简单的PHP脚本,它将参数传递给这些函数。但是攻击者已经有了注入/上传恶意脚本的方法。如果您根本不使用这些函数或从用户输入传递参数,则攻击者无法使用eval()或亲属在您的服务器上运行任意代码。 您打算为您的用户托管此框架吗?如果您允许用户上传和运行代码,那么您手中就会遇到更大的问题。 阅读有关远程代码执行和远程/本地文件包含的信息,以了解有关此相关攻击的更多信息:Common PHP vulnerabilities

eenim

赞同来自:

要主要出于安全原因禁用功能,可以在php.ini配置文件中使用disable_functions指令。 但是,正如文件所述:

This directive must be set in php.ini For example, you cannot set this in httpd.conf.
我认为这太“内部”,无法在PHP以外的任何地方进行配置......而且由于它与安全相关,因此需要由系统管理员进行配置。 点击 尽管如此,最好的安全措施是编写干净/安全的代码,过滤所有输入,转义所有输出......并且不要让任何人在您的服务器上运行自己的代码!

yalias

赞同来自:

您可以disable evalhttps://github.com/mk-j/PHP_diseval_extension并解决suhosin不兼容php7 /稳定的问题。

et_et

赞同来自:

disable_functions指令仅在php.ini configuration中可用。 在运行时禁用函数没有多大意义,因为您可以在运行时修改禁用的函数列表以重新启用函数。