2013-05-04 8 views
9

Ich baue eine iOS-App, die mit dem Server kommuniziert, um die Daten zu erhalten.django csrf für api, das mit iOS-Apps funktioniert

Wenn es nur eine normale App ist, kann ich csrf Token über Formulare (seit alle aus der gleichen Domäne) senden. Aber für iOS-Apps glaube ich nicht, dass ich csrf-Token setzen kann.

Also, wenn Anfragen von iOS-Anwendungen, auf den Server, bekomme ich Fehler in Bezug auf CSRF. Also, was ist die Lösung dafür? Deaktivieren Sie diese CSRF-Funktion oder einen anderen besseren Weg? Dies ist meine erste iOS-App, also erzähle mir bitte einen besseren Weg, damit ich dem folgen werde.

Antwort

10

Für die URLs ("API-Endpunkte"), auf die Ihre iOS App zugreift, müssen Sie in den entsprechenden Ansichtsfunktionen @csrf_exempt angeben, um den csrf-Schutz zu deaktivieren.

Weitere Details hier -https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.csrf_exempt

Und diese URLs über andere Authentifizierungsmethoden, wie Session-Authentifizierung schützen.

Für Ihre Authentifizierungszwecke können Sie leicht einen Verweis darauf erstellen, was django rest framework und django tastypie getan hat. Beide verwenden SessionAuthentication-Klassen für die Authentifizierung und schützen die exponierten URLs (API-Endpunkte), mit denen Ihre iOS-App eine Verbindung herstellen kann.

Referenzen: -

Django tastypie auch eine Berechtigungsklasse, die nicht mit der Authentifizierung zu verwechseln ist. Es hat auch eine APIKey-Autorisierungsklasse, die nützlich wird, wenn du deine Django-URLs anderen Entwicklern von Drittanbietern zugänglich machen möchtest, die eine eigene App erstellen möchten, um mit deinen Django-URLs zu kommunizieren (denke an "Facebook-APIs"). . Jedem Drittanbieter-Entwickler kann im Wesentlichen eine einzigartige API bereitgestellt werden. Da Sie die APIKeyAuthorization-Klasse und einen eindeutigen API-Schlüssel für jede Drittanbieter-App zur Verfügung haben, können Sie sicher sein, dass nur "autorisierte" Apps Ihre Django-URLs verwenden können. Dies ist die Essenz, wie verschiedene große Plattformen wie "Google+" oder "Facebook" usw. funktionieren.

Einzelheiten darüber, wie die django csrf arbeitet

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

Der Schutz CSRF basiert auf den folgenden Dinge:

Ein CSRF-Cookie, das auf einen zufälligen Wert (eine Sitzung unabhängig nonce, wie es genannt wird), auf die andere Seiten keinen Zugriff haben.

Dieser Cookie wird von CsrfViewMiddleware gesetzt. Es ist beabsichtigt, permanent zu sein, , aber da es keine Möglichkeit gibt, ein Cookie zu setzen, das nie abläuft, wird es mit jeder Antwort gesendet, die django.middleware.csrf.get_token() aufgerufen hat (die intern verwendete Funktion zu abrufen das CSRF-Token).

Ein verstecktes Formularfeld mit dem Namen 'csrfmiddlewaretoken' ist in allen ausgehenden POST-Formularen vorhanden. Der Wert dieses Feldes ist der Wert des CSRF Cookies.

Dieser Teil wird durch das Template-Tag erledigt.

Für alle eingehenden Anfragen, die nicht verwenden HTTP GET, HEAD, OPTIONS oder TRACE, ein CSRF-Cookie vorhanden sein muss, und das ‚csrfmiddlewaretoken‘ Feld muss vorhanden und korrekt sein. Wenn dies nicht der Fall ist, erhält der Benutzer einen 403 Fehler.

Diese Überprüfung wird von CsrfViewMiddleware durchgeführt.

Darüber hinaus wird strenge HTTPS-Anfragen von CsrfViewMiddleware überprüft. Dies ist notwendig, um eine Man-In-The-Middle-Attacke zu adressieren, die unter HTTPS möglich ist, wenn eine sitzungsunabhängige Nonce verwendet wird, da die HTTP 'Set-Cookie'-Header (leider) von Clients akzeptiert werden im Gespräch mit einer Website unter HTTPS. (Referer Prüfung für HTTP-Anforderungen erfolgt nicht, weil die Anwesenheit des Sammlers Referer ist nicht zuverlässig genug, um unter HTTP.)

Dies stellt sicher, dass nur Formen, die von Ihrer Website stammen können Daten verwendet werden, zurück zu senden.

+0

Danke. ...... ... +1 – user2349115

Verwandte Themen