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
Antwort
Nein. Es gibt keine eingebaute Logik in GAE dafür. Jeder Support müsste auf der Ebene Ihres anwendungsspezifischen Request-Routings bestehen.
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.
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. –
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.
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. –
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
- 1. Blockieren von Appengine-Tests mit Windows-Firewall verhindern
- 2. AppEngine: nicht importieren „google.golang.org/appengine“
- 3. So verhindern Sie das Senden wiederholter AJAX-Anforderungen
- 4. appengine-application.xml
- 5. GZipOutputStream & appengine
- 6. AppEngine-Transaktionen
- 7. appengine Taskqueue
- 8. Mehrere Pull-Anforderungen von einzelnen Pull-Anforderungen
- 9. App Anforderungen
- 10. Google AppEngine-Datenspeicher außerhalb von AppEngine-Projekt verwenden
- 11. AppEngine vs. sendmail Speicherplatzproblem
- 12. nutzererzeugte Spalte in AppEngine
- 13. Prüffelder für AppEngine-Entitäten
- 14. AppEngine: Mutliple Konfigurationen/Umgebungen
- 15. Tagging-Schema für AppEngine
- 16. Ungleichheitsfilter in AppEngine Datastore
- 17. Alternative für Google AppEngine?
- 18. Denken in AppEngine
- 19. django auf Google Appengine
- 20. Google AppEngine Session Beispiel
- 21. Google appengine: Aufgabenwarteschlangenleistung
- 22. Datenbank Synchronisierung in appengine
- 23. Appengine Blobstore - Video-Streaming
- 24. Migrieren von AppEngine
- 25. EJB + Google AppEngine
- 26. appengine - ftp Alternativen
- 27. Multipart upload zu appengine
- 28. OData4J und AppEngine
- 29. Google Appengine Datastore Alternative?
- 30. Google AppEngine Abfrageauftrag
Was genau meinen Sie mit "Anfragen von Referrern außerhalb der Anwendung"? Z.B. Ist das ein CORS-Problem? –
Ja, natürlich. –
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