2

我已经在我的专用 CentOS 服务器上安装了 Suhosin。我有大约 80 个帐户,其中大多数运行 Joomla 或 Wordpress 网站。当涉及到 eval 代码的黑客攻击和注入时,其中一些已经过时了。

我想启用 Suhosin 的禁用 eval 功能,但不会破坏以合法方式使用 eval 的网站的功能。我浏览了文档,据我了解,最好的方案是在 php.ini 中添加它:

suhosin.executor.disable_eval = On
suhosin.executor.eval.whitelist =
suhosin.executor.eval.blacklist = include, include_once, require, require_once, curl_init, fpassthru, file, base64_encode, base64_decode, mail, exec, system, proc_open, leak, syslog, 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

根据我阅读文档的理解,黑名单中的任何内容都将被删除并记录,因为白名单是空的。但事实并非如此。似乎一切都被删除并记录了。

由于制作白名单几乎是不可能的,我想问一下这是否与我对配置的误解有关,或者某些东西没有按预期工作。

提前感谢您的任何帮助。

4

2 回答 2

2

suhosin.executor.disable_eval

Off. 如果On在您的示例中设置为喜欢,eval()将完全禁用(这就是您在日志中看到的内容)。


顺便说一句,我认为eval()在 PHP 应用程序中没有合法的使用方式。应该避免真正使用它的应用程序。除非发生崩溃,否则我会完全关闭它,然后对此进行调查。

于 2014-07-30T12:44:02.330 回答
2

设置suhosin.executor.disable_eval=On将完全禁用eval()。例如eval('anything();')将被阻止。

设置suhosin.executor.eval.blacklist将仅阻止指定的功能。例如

suhosin.executor.eval.blacklist = base64_decode

将阻止 eval 执行base64_decode。eval('base64_decode("...");');

注意:一些常见的 PHP 代码注入攻击使用该构造eval(base64_decode(...))进行混淆。在这种情况下,base64_decode()首先由 PHP 执行,然后由 评估返回值eval()。列入base64_decode名单suhosin.executor.eval.blacklist并不能阻止这种攻击。禁用 write-and-executesuhosin.executor.include.allow_writable_files=Off可能是此处某些自动攻击的可行替代方案。

于 2014-07-31T17:09:43.240 回答