2016-05-06 30 views
1

我有一个加密的(ioncube)PHP文件,我无法修改,因为我没有原始源代码。我必须运行该文件才能完成任务。输入是在XML类型的post请求中。PHP将加密的php文件传入输入(ioncube)

我可以使用

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

赶输出,但我不知道如何操作输入XML。目前我使用的卷曲做一个本地主机后

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开始返回更奇怪的数据(空或非XML返回)。

所以问题是:如何在使用ob_start时伪造一个php://输入流?或者任何其他解决方案调用ioncube php文件而不解密它?

+0

您是否想要模仿100-500同时用户请求? – MonkeyZeus

+0

@MonkeyZeus如果你的意思是模拟500个请求到一个文件,那么我的答案是否定的,我已经有这么多的流量,我正在寻找一种方法来加载一个带有POST请求的ioncube加密文件(或者“伪造”因为我现在使用的卷曲不是资源友好的,并且失败很多次,但是因为我无法直接访问代码,所以我没有其他选择... – BlackSun

+0

我明白了,请参阅我的答案。 – MonkeyZeus

回答

0

既然你这样调用通过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(); 
+0

我用另一个将$ _POST写入日志文件来替换加密的php文件,以检查我需要覆盖哪个$ _POST,但$ _POST为空,但php://输入包含输入XML,任何想法如何“覆盖”php://输入流? 使用此代码将$ _POST写入文件: 'file_put_contents(“test.log”,print_r($ _ POST,true),FILE_APPEND);' – BlackSun