我在我的专用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
根据我的理解阅读文档,黑名单中的任何内容都将被删除并记录,因为白名单是空的。但事实并非如此。似乎一切都被删除并记录下来了。
由于制作白名单几乎是不可能的,我想问一下这是否与我对配置的误解有关或某些事情没有按预期工作。
提前感谢您的任何帮助。
答案 0 :(得分:2)
设置suhosin.executor.disable_eval=On
将完全停用eval()
。
例如。 eval('anything();')
将被屏蔽。
设置suhosin.executor.eval.blacklist
将仅阻止指定的功能。 E.g。
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
不会阻止此类攻击。禁用写入和执行suhosin.executor.include.allow_writable_files=Off
可能是此处某些自动攻击的可行替代方案。
答案 1 :(得分:0)
设置
suhosin.executor.disable_eval
到Off
。如果它在您的示例中设置为On
,eval()
将完全禁用(这就是您在日志中看到的内容)。
顺便说一下,我认为在PHP应用程序中使用eval()
是不合法的。应该避免使用它的应用程序。除非崩溃然后对此进行调查,否则我会将其完全关闭。