2016-08-15 3 views
0

Gibt es eine elegante Möglichkeit, Anfragen von Referrern außerhalb der Anwendung zu verhindern? Wenn man sich die app.yaml-Dokumentation anschaut, sieht es nicht so aus, als wäre es eine In-Box-Funktionalität, aber es scheint, als wäre es so bevorzugt/üblich, dass es irgendwo versteckt werden muss anstatt es manuell neu zu implementieren für jede Anwendung.AppEngine: Verhindern externer Anforderungen

+0

Was genau meinen Sie mit "Anfragen von Referrern außerhalb der Anwendung"? Z.B. Ist das ein CORS-Problem? –

+0

Ja, natürlich. –

+0

Verwenden Sie ein Framework wie Flask oder Django?Wenn ja, können Sie ganz einfach auf jede Anfrage mit einem Scheck abzufangen, wie: '@login_manager.request_loader @ login_manager.header_loader @ login_manager.user_loader' – GAEfan

Antwort

0

Nein. Es gibt keine eingebaute Logik in GAE dafür. Jeder Support müsste auf der Ebene Ihres anwendungsspezifischen Request-Routings bestehen.

0

Es ist gebaut in

In app.yaml Sie login: admin für einen Handler angeben können, und es wäre nur von Admin-Anfragen annehmen oder von App Engine (zB Cron, Aufgabenlisten und pribably urlfetch der App selbst. - der letzte nicht 100% sicher).

Siehe docs: https://cloud.google.com/appengine/docs/python/config/appref#handlers_element

Sie können auch HTTP_HEADERS überprüfen wie referer, IP, User-Agent.

Sie können auch ein Token ausstellen und bei jeder Anfrage prüfen.

+0

Ich spreche über allgemeine Sicherheit, nicht Login. Ich habe in der ursprünglichen Frage angegeben, dass die von Ihnen zur Verfügung gestellte Dokumentation keine dieser Informationen enthält. Ja, Sie können Header festlegen, damit Browser CORS erzwingen können. Ich hoffe jedoch auf die Möglichkeit, den kontrollierten API-Zugriff durch expliziten, nur von Google implementierten Application-Once-Zugriff zu erzwingen oder zumindest zu sagen, dass nur Referrer mit der Hosting-Domain übereinstimmen (möglicherweise nur eine String-Übereinstimmung in der Konfiguration). kann die Anfrage machen. Es wäre nur eine zusätzliche Ebene, um sich gegen einige einfache Angriffsvektoren zu schützen. –

0

Es gibt wahrscheinlich ein paar Probleme, die hier zusammengeführt werden.

CORS - eine vom Browser erzwungene Sicherheitsmaßnahme, um Seiten böswillig zu verhindern oder Daten anderweitig an Nicht-Ursprungsserver zu senden. Server können dies nicht erzwingen, sondern nur zulassen. Dies ist ein Problem auf Anwendungsebene (d. H. Nicht in GAE integriert)

XSRF - eine vom Server erzwungene Sicherheitsmaßnahme, um zu verhindern, dass authentifizierte Benutzer ihren Account durch bösartigen Clientcode missbrauchen. Dies ist ein Anwendungslevel (d. H. Nicht in GAE integriert)

Authentifizierung - Identifizierung eines Benutzers oder Clients durch bestimmte Berechtigungen. Es gibt einige Unterstützung dafür mit GAE (Cloud-Endpunkte, vorausgesetzt, Identitätsdienst, erfordert Admin-Login), aber es wäre in der Regel auch eine Anwendungsebene Sorge. Im Falle der Autorisierung eines Clients (im Gegensatz zu einem Benutzer) gibt es keine eingebaute Unterstützung.

Autorisierung - verschiedene Zugriffssätze basierend auf Rollen/Berechtigungen. Nicht eingebaute

Andere Lösungen:.

Verwenden von Host oder Origin-Header - trivialerweise von jemandem outfoxed eine Locke Anfrage oder eine beliebige Anwendung anspruchsvollere

API-Token Implementierung - in Ordnung für Server zu Server über https aber trivial kompromittiert, wenn es auf einem veröffentlichten Client (wie einer Webseite) verwendet wird

Ihre beste Wette ist es, Ihr Framework zu nutzen und Benutzerkonten zu haben.

Wenn Sie das nicht möchten, reicht im Normalfall etwas wie XSRF (Token in einem Header und Cookie) aus, um sicherzustellen, dass ein Web-Client auf Ihre 'App' reagiert hat. Dies funktioniert nur, wenn der Client ein Webbrowser ist, wie auch der Ursprung/Host.

+0

Ja. Ich suche nach einer Referrer (ergo, Header) basierten Lösung. Wie bereits erwähnt, suche ich nur nach dieser "zusätzlichen Ebene zum Schutz gegen einige einfache Angriffsvektoren". Es klingt jedoch nicht so, als gäbe es etwas für diesen eingebauten GAE, da es keine harten Antworten darauf gibt. –

+0

Da ist nichts eingebaut, da dies eigentlich keine Sicherheit bietet. Nichts zu tun, außer sich auf CORS zu verlassen, wird letztlich genauso effektiv sein (wie um zu vermeiden, dass es entweder die gleiche Anstrengung ist). – Nick