我目前正在开发一个PHP CMF,最终将会商业化,并且我想要使用traits。然而问题在于traits是PHP 5.4的特性,而广受欢迎的Suhosin安全补丁似乎不兼容PHP 5.4。
因此我的问题是:没有Suhosin安全补丁能否安全地运行PHP网站?如果不能,我和使用我CMF的其他人会面临哪些漏洞风险?
注意:我不担心共享主机。预计使用我的CMF的任何人都将对其Web服务器拥有管理控制权。
Suhosin是一种PHP加固补丁。它没有修复任何明确的安全漏洞——它只是使某些PHP脚本中的漏洞更难以利用。
Suhosin所做的一些更改最终被合并到PHP中。例如,PHP 5.3.4使文件名中的空字节始终引发错误(而不是在空字节处静默截断文件名),从而不再需要Suhosin对输入中的空字节进行各种保护层。
一般认为,没有Suhosin参与的情况下,PHP 5.4是相当安全的。未来,只要您的应用程序支持,使用新版本(5.4+)的PHP比使用带有Suhosin补丁的旧版本更好。
如果您无法禁用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)的示例,它们将通过任何易受攻击的第三方模块或站点用户帐户感染您的站点。
RATS可以采取多种形式,其中一些很容易进行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"; ?>
在我看来,duskwuff上面的陈述并不具有权威性,也不一定正确(特别是考虑到自那以后新版本的PHP所见到的关键漏洞数量)。
在我的观点中,如果Suhosin适用于当前的PHP版本,从安全角度来看,肯定会更好。 当然,由于它不可用,停留在旧的(最终未维护的)PHP版本也不是一个解决方案。
通常,PHP尤其是PHP应用程序因存在安全问题而臭名昭著...因此问题不在于"没有Suhosin的新版本PHP是否安全"...
<?php echo 'hello world'; ?>
来破坏一个网站,那么你应该开办一家渗透测试公司。一个网站的安全性取决于你的维护措施。 - Marc B