繁体   English   中英

如何测试是否允许PHP system()函数? 并且出于安全原因没有关闭

[英]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_modedisable_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()不适用于这种情况?

http://fr.php.net/function_exists

exec()如果失败则返回false,如果成功则返回成功消息字符串...因此以下内容应该有效:

if(!exec('cd .')){ die('ERROR: Exec is not available!!!'); }      

替换'cd。' 可以是您知道在系统上工作的任何功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM