2017-06-04 4 views
0

Wenn ich zum Beispiel eine Null (0) für alle Benutzer anzeigen möchte, und ich möchte, dass alle Benutzer einen (1) zu der Zahl hinzufügen, wobei ihre Identität nur für Superusers angezeigt wird. Und wie man sicherstellt, dass jeder Benutzer nur einmal hinzufügen kann, und natürlich, welche Sicherheitsanforderungen müssen erfüllt werden, um zu verhindern, dass nicht autorisierter Zugriff irgendetwas davon ändert oder irgendwelche Informationen erhält?Woher weiß Django, welcher Benutzer welche Daten besitzt?

Ich verstehe, das ist ein großes Thema, aber könnte mir jemand kurz erklären, welche Teile der Programmierung beteiligt sind, und vielleicht ein paar gute Bücher zu diesen Themen?

Antwort

4

Das Web ist zustandslos. Dies bedeutet, dass ein herkömmlicher Webserver, wenn ein Browser dieselbe Seite zweimal anfordert, keine wirkliche Möglichkeit hat zu wissen, ob es sich um denselben Benutzer handelt.

Sitzungen eingeben. Django verfügt über ein Authentifizierungssystem, bei dem sich jeder Benutzer anmelden muss. Wenn der Benutzer angemeldet ist, erhält er eine Sitzung. Eine Sitzung besteht aus zwei Teilen; Ein Cookie mit einem zufällig generierten Token und ein Datenbankeintrag mit demselben Token.

Wenn sich ein Benutzer anmeldet, wird ein neues Sitzungstoken generiert und über einen Cookie an den Benutzer zurückgegeben, den der Browser speichert. Zur gleichen Zeit wird dieser Datensatz in der Datenbank erstellt. Jedes Mal, wenn ein Browser eine Anfrage an Django sendet, sendet er sein Session-Cookie zusammen mit der Anfrage und Django vergleicht dies mit den Token in der Datenbank. Wenn das Token existiert, wird der Benutzer als angemeldet betrachtet. Wenn das Token nicht existiert, ist der Benutzer nicht angemeldet.

In Django gibt es Benutzermodelle, die es einfach machen, zu überprüfen, wer der aktuelle ist angemeldeter Benutzer ist für jede Anfrage. Sie tun all das Token-Checking im Hintergrund für uns bei jeder Anfrage von jedem Benutzer gemacht. Ausgerüstet mit diesem können wir andere Modelle über "Fremdschlüssel" -Beziehungen zuordnen, um anzuzeigen, wem was gehört.

Angenommen, Sie machen einen Blog, in dem mehrere Benutzer Artikel schreiben können. Wenn Sie eine Editierfunktion erstellen möchten, möchten Sie wahrscheinlich Benutzer darauf beschränken, nur ihre eigenen Artikel und keine anderen Artikel zu bearbeiten. In dieser Situation erhalten Sie die Anfrage, erfahren, wer der aktuelle Benutzer ist, vergleichen diesen Benutzer mit dem Feld "Autor" im Blog Post-Modell und sehen, ob dieser Fremdschlüssel übereinstimmt. Wenn es übereinstimmt, ist der Benutzer, der die aktuelle Anfrage macht, der Eigentümer und darf bearbeiten.

Dieser ganze Prozess ist durch die Tatsache gesichert, dass die Sitzungstoken zufällig generierte Hashes sind, anstatt einfache ID-Nummern. Ein böswilliger Angreifer kann nicht einfach den Hashwert übernehmen und den Wert erhöhen, um auf benachbarte Konten zuzugreifen. Sie müssen den Hash eines anderen Benutzers vollständig abfangen. Dies kann weiter durch die Verwendung von SSL-Zertifikaten gesichert werden, so dass Ihre Verbindungen über https:// gehen und der gesamte Datenverkehr zwischen dem Browser und Ihrem Server verschlüsselt wird.

Verwandte Themen