我正在开发一个PHP CMF,它最终将在商业上发布,我想使用特征。然而问题是特性是PHP 5.4特性,显然流行的Suhosin安全补丁与PHP 5.4不兼容。
所以我的问题是:在没有Suhosin安全补丁的情况下运行PHP网站是否安全?如果没有,我将使用我的CMF向我自己和其他人开放的哪些漏洞?
注意:我不关心共享托管。预计使用我的CMF的任何人都可以对其Web服务器进行管理控制。
答案 0 :(得分:40)
Suhosin是一个PHP强化补丁。它没有修补任何明显的安全漏洞 - 它只是使PHP脚本中的一些漏洞更难以利用。
Suhosin做出的一些改变最终归结为PHP。例如,PHP 5.3.4使得Suhosin对输入中的空字节的各种保护层变得不必要,这使得文件名中的空字节总是抛出错误(而不是在空字节处静默截断文件名)。
在没有涉及Suhosin的情况下,PHP 5.4通常被认为是相当安全的。展望未来,只要您的应用程序支持它,您最好使用较新的(5.4+)版本的PHP,而不是使用Suhosin补丁的旧版本。
答案 1 :(得分:7)
如果你不能禁用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目录不能在源代码管理中,因此也无法跟踪)
答案 2 :(得分:1)
在我看来,如果Suhosin可用于当前的PHP版本,那么从安全POV开始肯定会更好。 当然,事实并非如此,保留旧的(最终未维护的)PHP版本也不是解决方案。
通常PHP和特别是PHP应用程序因安全问题而众所周知......所以问题是“没有Suhosin的新版PHP版本是安全的”......