basit bir 'php url vekil bina

1 Cevap php

Hi
I need to implement a simple PHP proxy in a web application I am building (Its flash based and the destination service provider doesn't allow edits to their crossdomain.xml file)

Herhangi bir php uzmanları aşağıdaki 2 seçenekleri tavsiye edebilir miyim? Ayrıca, ben düşünüyorum, ama ben de bazı başlık bilgisi eklemek gerekir ki, emin değilim.

Herhangi bir geri bildirim için teşekkür ederiz!

seçenek1

$url = $_GET['path'];
readfile($path);

opsiyonu2

 $content .= file_get_contents($_GET['path']);

 if ($content !== false) 
 {  

      echo($content);
 } 
 else 
 {  
      // there was an error
 }

1 Cevap

Her şeyden önce, asla ama asla hiç sadece kullanıcı girişi dayalı bir dosya içerir. Birisi bu gibi komut çağırır olsaydı ne olacağını düşünün:

http://example.com/proxy.php?path=/etc/passwd

Sonra sorunu üzerine: Eğer ne tür verilerin vekalet edilir? Hiç bir türlü, o zaman içerikten içerik türünü algılar ve onu geçmek için gerekiyorsa o kadar uç alma o oluyor biliyor. Mümkünse: I (http://pear.php.net/package/HTTP_Request2 bakınız) HTTP_Request2 veya Armut benzer bir şey gibi bir şey kullanarak öneririm. Ona erişiminiz varsa, o zaman böyle bir şey yapabilirsiniz:

// First validate that the request is to an actual web address
if(!preg_match("#https?://#", $_GET['path']) {
        header("HTTP/1.1 404 Not found");
        echo "Content not found, bad URL!";
        exit();
}

// Make the request
$req = new HTTP_Request2($_GET['path']);
$response = $req->send();
// Output the content-type header and use the content-type of the original file
header("Content-type: " . $response->getHeader("Content-type"));
// And provide the file body
echo $response->getBody();

Bu kod test edilmediğini unutmayın, bu size bir başlangıç ​​noktası vermek için sadece budur.