2016-05-10 9 views
1

Bisher habe ich versucht, wie etwas zu machen:Ist es möglich, API mit diesen Methoden zu schützen?

  1. überprüfen Benutzer IP-Adresse und
  2. Moderator Wenn beide übereinstimmen Host-& IP erlaubt, ermöglichen den Zugang
  3. Wenn nein, Anzeigefehler

Ich baue API, und bis jetzt kommen alle Anfragen nur von meinem Host. Und hier ist das Problem:

  1. Wie diese Anforderungen ermöglichen, nur dann ausgeführt werden, wenn sie von den lokalen Host kommen (es gibt nur wenige, die nur von bestimmten Host ausgeführt werden sollen, Rest Methoden sollte öffentlich zugänglich sein)
  2. Wie man Leute davon abhält, Referer zu spoofen und x-weitergeleitet
  3. Ist es überhaupt möglich?

Hier sind einige Bits von Code:

SetZugang Origin-Header

if(isset($_SERVER['HTTP_REFERER'])) { 
     $refererProtocol = str_replace(':', '', substr($_SERVER['HTTP_REFERER'], 0, strpos($_SERVER['HTTP_REFERER'], "/"))); 
     $refererHost = str_replace($refererProtocol . '://', '', $_SERVER['HTTP_REFERER']); 
     $ACAO = $refererProtocol . '://' . substr($refererHost, 0, strpos($refererHost, "/")); 
     $this->accessControl = [ 
      'allow_origin' => $ACAO, 
      'from_referer' => true 
     ]; 
     header("Access-Control-Allow-Origin: " . $ACAO); 
    } else { 
     $this->accessControl = [ 
      'allow_origin' => 'https://' . $_SERVER['HTTP_HOST'], 
      'from_referer' => false 
     ]; 
     header("Access-Control-Allow-Origin: " . 'https://' . $_SERVER['HTTP_HOST']); 
    } 

prüfenAnfrage Herkunft

$localHost = 'https://' . $_SERVER['SERVER_NAME']; 

    if ($this->accessControl['allow_origin'] === $localHost || $this->accessControl['allow_origin'] === $this->Settings['allow_host']) { 
     if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
      $this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']); 
      return false; 
     } else { 
      if ($this->Settings['allow_ip'] === $_SERVER['REMOTE_ADDR']) { 
       return true; 
      } else { 
       $this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']); 
       return false; 
      } 
     } 
    } else { 
     $this->JSON->apiError(403, 'You are not allowed to execute this method', ['MyAPI', 'onlyLocalHost']); 
     return false; 
    } 

Und alles hätte perfekt sein können, außer einer Sache: ich habe CloudFlare laufen und natürlich kann ich nicht mehr nach REMOTE_ADDR suchen.

Gibt es also mögliche Lösungen für dieses Problem?

+0

Es wird besser sein, wenn Sie einige Token mit Ihrer Anfrage passieren solche Host – siddhesh

+0

@siddhesh zu identifizieren, yep, schon mit, aber das Problem ist, können die Menschen kopieren noch Token und es verwenden, um Bypass so genannte "Sicherheit" –

+0

können Sie Token Zeit basiert bedeutet, dass nach bestimmten Zeit Token ändern sagen 15 min oder 1 Tag wird es nicht die 100% Lösung, sondern reduziert den Hack wenn jemand das Token noch nicht gültig nach einiger Zeit – siddhesh

Antwort

2

Cloudflare wenige Variablen gesendet

$ _SERVER [ "HTTP_CF_CONNECTING_IP"], um den Client (Besucher) IP-Adresse angeben.

$ _SERVER ["HTTP_CF_IPCOUNTRY"] Land des Besuchers zur Verfügung stellen.

$ _SERVER ["HTTP_CF_VISITOR"] Zeigt das für die Verbindung verwendete Schema an - HTTP oder HTTPS.

$ _SERVER ["HTTP_CF_RAY"] Der CF-Ray-Header wird übergeben, der einen Hash enthält, der an das Datencenter angehängt wurde, durch das die Anforderung kam.

Sie können auch $ _SERVER ['HTTP_X_FORWARDED_FOR'] verwenden Dies ist ein gut etablierter HTTP-Header, der von Proxies, einschließlich CloudFlare, verwendet wird, um andere IP-Adressen in der Anfrage weiterzuleiten.

Mehr https://support.cloudflare.com/hc/en-us/articles/200170986

Verwandte Themen