24

我目前正在开发一个最终将在商业上可用的 PHP CMF,我想使用特征。然而问题在于,trait 是 PHP 5.4 的一个特性,而且很明显流行的 Suhosin 安全补丁与 PHP 5.4 不兼容。

所以我的问题是:在没有 Suhosin 安全补丁的情况下运行 PHP 网站是否安全?如果不是,我会给自己和其他使用我的 CMF 的人留下哪些漏洞?

注意:我不关心共享主机。预计使用我的 CMF 的任何人都可以对其 Web 服务器进行管理控制。

4

3 回答 3

40

Suhosin 是一个 PHP 强化补丁。它没有修补任何明确的安全漏洞——它只是使 PHP 脚本中的一些漏洞更难被利用。

Suhosin 所做的一些更改最终被纳入 PHP。例如,Suhosin 对输入中空字节的各种保护层在 PHP 5.3.4 中变得不必要了,这使得文件名中的空字节总是抛出错误(而不是在空字节处静默截断文件名)。

在没有 Suhosin 的情况下,PHP 5.4 通常被认为是相当安全的。展望未来,只要您的应用程序支持它,您最好使用更新的(5.4+)版本的 PHP,而不是使用带有 Suhosin 补丁的旧版本。

于 2013-01-19T07:25:34.033 回答
7

如果您不能禁用 eval()(一种语言结构,而不是函数)或在 eval 中有一个黑名单来禁用 eval 中的大部分黑客工具箱,那么您正在运行的带宽负载对于寻找带宽的黑客来说是无法抗拒的运行他们的有效载荷。理想情况下,不能总是将什么列入黑名单,因为 3rd 方模块编写者甚至框架核心依赖于 eval() 上下文中的一些函数:

suhosin.executor.eval.blacklist=include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,pfsockopen,shell_exec,ini_restore,symlink,stream_socket_server,proc_nice,popen,proc_get_status,dl,pcntl_exec,pcntl_fork, pcntl_signal, pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled, pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, socket_accept, socket_bind, socket_connect, socket_create, socket_create_listen, socket_create_pair,link,register_shutdown_function,register_tick_function,create_function,passthru,p_open,proc_close,proc_get_status,proc_terminate, allow_url_fopen,allow_url_include,passthru,popen,stream_select

如果您无法过滤这些功能,则缺少安全性的主要组成部分。

以下是一些远程管理工具 (RATS) 的示例,它们会通过任何易受攻击的第三方模块或站点用户帐户感染您的站点。

RAT 可以采用多种形式,其中一些很容易 grep:

<?php error_reporting(0); eval(gzuncompress(base64_decode('eF5Tcffxd3 ...

<?php preg_replace("/.*/e","\x65\x76\x61\x6C\x28\ ...

有些更专业和混淆,并且无法真正被 grep 寻找,除非 suhosin 提示您他们执行了,否则无法找到:

<?php $_0f4f6b="\x70\x72\x65\x67\x5f\x72\x65\x70\x6c\x61\x63\x65";$_0f4f6b("\x7 ...

<?php require "./.cache/.%D59C%49AA%73A8%63A1%9159%0441"; ?>  

(注意在这种情况下,CACHE 目录不能在源代码控制中,因此也不能被跟踪)

于 2013-05-07T21:24:14.817 回答
1

恕我直言,上面来自duskwuff 的声明,没有Suhosin 一切都会好起来的既不是权威也不一定是正确的(特别是考虑到自那时以来较新的PHP 版本出现的关键漏洞数量)。

在我看来,如果 Suhosin 可用于当前的 PHP 版本,那肯定会更好 - 从安全 POV 来看。当然,事实并非如此,停留在旧的(最终未维护的)PHP 版本也不是一个解决方案。

一般来说,PHP,尤其是 PHP 应用程序以存在安全问题而闻名……所以问题不是“没有 Suhosin 的新 PHP 版本是否安全”……

于 2013-03-15T01:59:05.663 回答