PHP将输入传递到加密的PHP文件(ioncube)


PHP passing input to encrypted php file (ioncube)

我有一个加密的(ioncube)PHP文件,我无法修改,因为我没有原始源代码。我必须运行那个文件才能做一些事情。输入是XML类型的post请求。

我可以使用

ob_start();
include("encoded.php");
$output = ob_get_contents();
ob_end_clean();

以捕获输出,但我不知道如何操作输入XML。

我目前正在使用CURL做一个本地主机后

private static function post($xml)
{
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL             => self::$site,
        CURLOPT_PORT            => 443,
        CURLOPT_HTTPHEADER      => array(
                                    "Content-type: text/xml",
                                    "Content-length: ".strlen($xml),
                                    "Connection: close"),
        CURLOPT_POSTFIELDS      => $xml,
        CURLOPT_POST            => true,
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_HTTPAUTH        => CURLAUTH_BASIC,
        CURLOPT_TIMEOUT         => 10,
        CURLOPT_SSL_VERIFYPEER  => 0,
        CURLOPT_SSL_VERIFYHOST  => 0,
        CURLOPT_FORBID_REUSE    => 0,
        CURLOPT_FRESH_CONNECT   => 1
    ));
    $data = curl_exec($ch);
    if (curl_errno($ch))
        $data = "ERROR:".curl_errno($ch);
    curl_close($ch);
    return $data;
}

此代码适用于少数连接,但当大量用户(在100到500之间)试图调用此代码时,加密的php开始返回wierd数据(空或非XML返回)。

所以问题是:我怎么能伪造php://input使用ob_start时流?或者任何其他在不解密的情况下调用ioncubephp文件的解决方案?

由于您通过include文件调用ioncube文件,如下所示:

ob_start();
include("encoded.php");
$output = ob_get_contents();
ob_end_clean();

你可以简单地强制任何你需要的$_POST数据,如下所示:

ob_start();
$_POST['some_key1'] = 'some_value1';
$_POST['some_key2'] = 'some_value2';
include("encoded.php");
$output = ob_get_contents();
ob_end_clean();