2016-05-03 3 views
1

Ich arbeite mit einem XML-API-Provider. Sie stellen mir bestimmte Bildquellen zur Verfügung.Hide/Convert sensitive info in img src oder link

<img src="http://api-provider.com/image/?key=YOUR_KEY&id=ID"/> 

Jetzt um irgendein Bild zu bekommen, muss ich den Schlüssel zur Verfügung stellen, den ich für die API verwende. So könnte jemand einfach auf die Seitenquelle schauen und den Schlüssel bekommen.

Gibt es sowieso um diesen zu umgehen und den Schlüssel irgendwie zu verstecken?

Antwort

2

Sie können eine PHP-Datei, um das Bild zu laden und den API-Schlüssel in Ihrer PHP-Datei zu setzen, so dass API-Schlüssel wird von anderen gefallen das nicht lesbar sein:

$API_Key = "Your_API_Key_Here"; 
$url = "http://api-provider.com/image/?key={$API_Key}&id={$_GET['id']}"; 
header('Content-type: image/jpeg'); 
readfile($url); 

Dann in Ihrem Tag Bild src setzen Ihr eigener Link: http://yourdomain.com/get_image.php?id= {$ Image_Id}

Aber es wird Ihre Server-Ressourcen verwenden, da das Bild von Ihrem Server gelesen werden würde. Auch wenn jemand diese URL bekommt, kann er diese ohne API Key benutzen, also wird es nicht anders sein, als den API Key in URL an erster Stelle zu zeigen, vielleicht können Sie die Session verifizieren und dann das Bild anzeigen.


Wie @ miken32 darauf hingewiesen, dass Benutzer, um sicherzustellen, ist nicht direkt zu benutzen, um Ihre Server versuchen, Sie mit einer Zufallszahl multiplizieren und dann tun base64_encode auf die ID. So:

$Image_Src = "http://yourdomain.com/get_image.php?id=".base64_encode($Image_Id*18); 

und in Ihre PHP-Datei, bevor Sie das Bild zuerst überprüfen zu lesen, dass die ID durch Umkehrung der Codierung Sie oben hat eine gültige Zahl ist.

$Image_Id = $_GET['id']; 
$Image_Id = base64_decode($Image_Id); 
if (is_numeric($Image_Id)){ 
    $Correct_Image_Id = $Image_Id/18; 
    if ($Correct_Image_Id > 0){ 
     //read image here 
    } 
} 
+0

Es ist am besten, die ID in irgendeiner Weise zu verschleiern. Zum Beispiel multiplizieren Sie die ID mit 18 und kodieren sie dann mit der Basis 64. Auf diese Weise ist es für den Benutzer weniger wahrscheinlich, die ID auf dem Remote-Server herauszufinden. – miken32

+0

Das ist auch eine gute Idee, ich habe die Antwort aktualisiert. –