[英]how to test if PHP system() function is allowed? and not turned off for security reasons
我想知道如何测试服务器上是否允许system()或exec()。 我一直收到此错误“警告:出于安全原因,exec()已被禁用...”
我知道safe_mode函数在我的提供程序运行的php版本中被折旧(5.3.3)所以我不能使用get_ini('safe_mode')检查。
还有什么可做的?
我用它作为备份脚本。 如果提供者允许系统,则脚本会生成一个tar文件,并在用户登录时将其邮寄给我。
提前致谢。
好吧,只有两种方法可以被禁用: safe_mode
或disable_functions
。
所以你可以做一个检查:
function isAvailable($func) {
if (ini_get('safe_mode')) return false;
$disabled = ini_get('disable_functions');
if ($disabled) {
$disabled = explode(',', $disabled);
$disabled = array_map('trim', $disabled);
return !in_array($func, $disabled);
}
return true;
}
哦,并且function_exists
应该返回true,因为它是一个核心函数(否则你可以伪造一个核心函数并对主机造成一些真正的破坏)...因此is_callable
也应该返回true(因为函数确实存在)。 因此,唯一的方法是检查ini设置,或实际调用它...
编辑:另外需要注意的是,有几种方法可以执行shell命令。 查看:
@ircmaxell所示的禁用功能测试和安全模式的存在可以说是最简单的方法。
如果你想要可靠地找出1000%是否可以执行系统命令 - 可能有像Suhosin这样的安全补丁在另一个级别上阻止它 - 尝试exec()
一个必须在所有系统上工作的外部命令(包括Windows) ),即使用户权限非常紧张,也极不可能失败。
说
cd .
这应该工作(即不返回false
,并返回错误级别代码0
)至少在所有Linux,Windows和Unix风格包括OS X上。
function_exists()不适用于这种情况?
exec()如果失败则返回false,如果成功则返回成功消息字符串...因此以下内容应该有效:
if(!exec('cd .')){ die('ERROR: Exec is not available!!!'); }
替换'cd。' 可以是您知道在系统上工作的任何功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.