如何在PHP中绕过函数参数?

如何在PHP中绕过函数参数?,php,python,parameters,joomla,Php,Python,Parameters,Joomla,我目前正在编写一个python脚本,用于恢复Joomla网站。 它实际上是基于发布的缺陷。 我怀疑我针对的PHP脚本不应该被直接调用。 当我对它运行脚本时,它返回 {“状态”:false,“消息”:“无效登录”} 这就是我怀疑应该负责的职能 // Import configuration masterSetup(); $retArray = array( 'status' => true, 'message' => null ); $enabled =

我目前正在编写一个python脚本,用于恢复Joomla网站。 它实际上是基于发布的缺陷。

我怀疑我针对的PHP脚本不应该被直接调用。 当我对它运行脚本时,它返回

{“状态”:false,“消息”:“无效登录”} 这就是我怀疑应该负责的职能

// Import configuration
masterSetup();

$retArray = array(
    'status'    => true,
    'message'   => null
);

$enabled = AKFactory::get('kickstart.enabled', false);

if($enabled)
{
    $task = getQueryParam('task');

    switch($task)
    {
        case 'ping':
            // ping task - realy does nothing!
            $timer = AKFactory::getTimer();
            $timer->enforce_min_exec_time();
            break;

        case 'startRestore':
            AKFactory::nuke(); // Reset the factory

            // Let the control flow to the next step (the rest of the code is common!!)

        case 'stepRestore':
            $engine = AKFactory::getUnarchiver(); // Get the engine
            $observer = new RestorationObserver(); // Create a new observer
            $engine->attach($observer); // Attach the observer
            $engine->tick();
            $ret = $engine->getStatusArray();

            if( $ret['Error'] != '' )
            {
                $retArray['status'] = false;
                $retArray['done'] = true;
                $retArray['message'] = $ret['Error'];
            }
            elseif( !$ret['HasRun'] )
            {
                $retArray['files'] = $observer->filesProcessed;
                $retArray['bytesIn'] = $observer->compressedTotal;
                $retArray['bytesOut'] = $observer->uncompressedTotal;
                $retArray['status'] = true;
                $retArray['done'] = true;
            }
            else
            {
                $retArray['files'] = $observer->filesProcessed;
                $retArray['bytesIn'] = $observer->compressedTotal;
                $retArray['bytesOut'] = $observer->uncompressedTotal;
                $retArray['status'] = true;
                $retArray['done'] = false;
                $retArray['factory'] = AKFactory::serialize();
            }
            break;
这是主设置()


我的问题是,是否有可能绕过解析为函数的参数,并强制函数返回true?

我想不总是这样,但如果函数参数是从http请求中获取的,那么它就有可能被绕过,例如,可以绕过以下内容

在这里,以下命令清除了$\u请求,但没有清除
$\u POST
$\u GET
,因此留下了一个可供绕过的间隙

if(!empty($_REQUEST))
{
    foreach($_REQUEST as $key => $value)
    {
        unset($_REQUEST[$key]);
    }
}
在我的例子中,它只是避免函数返回默认值

function getQueryParam( $key, $default = null )
{
    if(array_key_exists($key, $_REQUEST)) {
        $value = $_REQUEST[$key];
    } elseif(array_key_exists($key, $_POST)) {
        $value = $_POST[$key];
    } elseif(array_key_exists($key, $_GET)) {
        $value = $_GET[$key];
    } else {
        return $default;
    }
    return $value;
}

我想不总是这样,但是如果函数参数是从http请求中获取的,那么它就有可能被忽略,例如下面的例子

在这里,以下命令清除了$\u请求,但没有清除
$\u POST
$\u GET
,因此留下了一个可供绕过的间隙

if(!empty($_REQUEST))
{
    foreach($_REQUEST as $key => $value)
    {
        unset($_REQUEST[$key]);
    }
}
在我的例子中,它只是避免函数返回默认值

function getQueryParam( $key, $default = null )
{
    if(array_key_exists($key, $_REQUEST)) {
        $value = $_REQUEST[$key];
    } elseif(array_key_exists($key, $_POST)) {
        $value = $_POST[$key];
    } elseif(array_key_exists($key, $_GET)) {
        $value = $_GET[$key];
    } else {
        return $default;
    }
    return $value;
}