php 5.4 在没有 Suhosin 的情况下安全吗?
我目前正在开发一个PHP CMF,它最终将商业化,我想使用traits。然而,问题是特征是PHP 5.4的功能,显然流行的Suhosin安全补丁与PHP 5.4不兼容。
所以我的问题是:在没有Suhosin安全补丁的情况下运行PHP网站是否安全?如果没有,我会让自己和其他使用CMF的人面临哪些漏洞?
注意:我不关心共享主机。预计使用我的CMF的任何人都可以对其Web服务器进行管理控制。
我目前正在开发一个PHP CMF,它最终将商业化,我想使用traits。然而,问题是特征是PHP 5.4的功能,显然流行的Suhosin安全补丁与PHP 5.4不兼容。
所以我的问题是:在没有Suhosin安全补丁的情况下运行PHP网站是否安全?如果没有,我会让自己和其他使用CMF的人面临哪些漏洞?
注意:我不关心共享主机。预计使用我的CMF的任何人都可以对其Web服务器进行管理控制。
Suhosin是一个PHP硬化补丁。它没有修补任何明确的安全漏洞 - 它只是使PHP脚本中的一些漏洞更难以利用。
Suhosin所做的一些更改最终被整合到PHP中。例如,PHP 5.3.4 使 Suhosin 针对输入中的空字节的各种保护层变得不必要,这使得文件名中的空字节总是抛出错误(而不是默默地截断空字节处的文件名)。
PHP 5.4 通常被认为是相当安全的,不涉及 Suhosin。展望未来,只要您的应用程序支持它,您将最好使用更新(5.4 +)版本的PHP,而不是使用Suhosin补丁的旧版本。
如果您无法禁用eval(一种语言构造,而不是函数)或在eval中设置黑名单以禁用eval中黑客的大部分工具箱,那么您正在运行大量带宽,这对于寻求带宽以运行其有效负载的黑客来说是不可抗拒的。理想情况下,黑名单并不总是可以完成的,因为第三方模块编写器甚至框架核心都依赖于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可以采取多种形式,有些很容易被嘲笑:
<?php error_reporting(0); eval(gzuncompress(base64_decode('eF5Tcffxd3 ...
<?php preg_replace("/.*/e","\x65\x76\x61\x6C\x28\ ...
有些更专业,更模糊,不能真正被贪婪,除非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 目录不能在源代码管理中,因此也无法跟踪)