2017-05-19 2 views
0

Ich habe ein jQuery Plugin entwickelt, das einige Daten anzeigt, die es von einer gesicherten RESTful API erhält. Die API ist durch eine Standardauthentifizierung und ein Token gesichert. Um nicht die grundlegenden Authentifizierungsinformationen noch die Logik Leck das Token zu schaffen, zog ich sie zu einem proxy.php, die im Grunde wie das aussieht:Wie kann man mit JavaScript über einen PHP-Proxy sicher auf eine geschützte API zugreifen?

$url = "http://the-api.com/path"; 
$context = stream_context_create(
    array(
     'http' => array(
      'header' => 
       "Authorization:Basic " . base64_encode("$username:$password") . "\r\n" . 
     ) 
    ) 
); 
$response = file_get_contents($url, false, $context); 

header("content-type: application/json"); 
header("Access-Control-Allow-Origin: *"); 
header('Access-Control-Allow-Credentials: true'); 
header('Access-Control-Max-Age: 86400'); 
header("Access-Control-Allow-Methods: GET, OPTIONS"); 
header('Access-Control-Allow-Headers: X-Requested-With, Origin, Content-Type, Authorization'); 
return $response; 

Es leitet die Anfrage mit den notwendigen Anmeldeinformationen und gibt die Antwort des API. So weit, ist es gut. Die Anmeldeinformationen befinden sich nicht im JavaScript-Code. Andere Leute können jedoch die gleiche Anfrage ausführen, indem sie die proxy.php aufrufen. Wie kann ich überprüfen, dass nur das jQuery Plugin die Proxy.php erfolgreich aufrufen kann? Könnte es durch eine Kombination aus Cookie und Token erfolgen? Die proxy.php befindet sich auf demselben Host/Domain wie das jQuery Plugin.

+0

theres keine Möglichkeit ... –

+0

Sie können schützen, dass Proxy.php nur Ajax Anruf erlaubt. Diese Frage kann Ihnen helfen. http://StackOverflow.com/questions/1393904/ajax-only-access –

+0

Sie können einen Blick auf [Secure ein PHP-Proxy] (https://stackoverflow.com/questions/13440663/secure-a-php -proxy) – ajoposor

Antwort

0

Wie kann ich überprüfen, dass nur das jQuery Plugin die Proxy.php erfolgreich aufrufen kann?

Sie können nicht.

Alles, was Sie tun, um es zu begrenzen, wird schließlich auf "Der Browser führt eine HTTP-Anfrage" herunterkochen. Alle Details dieser HTTP-Anfrage sind für den Benutzer des Browsers verfügbar (NB: Der Browser funktioniert für den Benutzer, nicht für die Website). Der Benutzer kann diese Details kopieren und sie verwenden, wie sie möchten.

Könnte es durch eine Kombination aus Cookie und Token erfolgen?

Nein. Der Cookie und das Token könnten kopiert werden, da sie für den Browser und damit für den Benutzer sichtbar sind.

+0

Was passiert, wenn das Token von PHP generiert und dem JS zur Verfügung gestellt wird (let token = )? Das Token ist nur für einen bestimmten Zeitraum gültig (einige Sekunden). Für jede Anfrage von der JS wird ein neues Token erzeugt und das Token wird auf eine Weise erzeugt, die für andere nicht reproduzierbar ist. Dann konnten andere die Anfrage nicht erneut senden, oder? – rsdev

+0

Das läuft darauf hinaus, dass "Leute, die auf die API zugreifen wollen, zuerst eine HTTP-Anfrage machen müssen, um einen Token zu bekommen ... den du jedem geben wirst, der danach fragt." Es ist kein Schutz. – Quentin

Verwandte Themen