没有Suhosin,PHP 5.4安全吗?

Eva*_*van 24 php suhosin

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

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

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

dus*_*uff 40

Suhosin是一个PHP强化补丁.它没有修补任何明显的安全漏洞 - 它只是使PHP脚本中的一些漏洞更难以利用.

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

如果没有涉及Suhosin,PHP 5.4通常被认为是相当安全的.展望未来,只要您的应用程序支持它,您最好使用较新的(5.4+)版本的PHP,而不是使用Suhosin补丁的旧版本.

  • -1(对不起,总是感觉很糟糕)一个模糊的答案.Suhosin有[很多功能](http://www.hardened-php.net/suhosin/a_feature_list.html)如果有人能告诉我**这些功能中有哪些**我感觉更舒服进入更高版本的PHP,但没有实现. (9认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

如果您无法过滤这些功能,则缺少安全性的主要组件.

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

RAT可以有多种形式,有些很容易:

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

<?php preg_replace("/.*/e","\x65\x76\x61\x6C\x28\ ...
Run Code Online (Sandbox Code Playgroud)

有些是更专业和混淆,并且不能真正被掠过,除非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"; ?>  
Run Code Online (Sandbox Code Playgroud)

(注意,在这种情况下,CACHE目录不能在源代码管理中,因此也无法跟踪)

  • 虽然你关于禁用eval的论点是有道理的,但它忽略了一个更明显的观点:过滤用户输入和保护服务器访问 - 如果黑客无法使用evals注入代码,他们就无法使用evals开头.了解如何将输入列入白名单并使用正确的输出编码比将常用语言功能列入黑名单更为广泛有用. (2认同)