Inhaltsverzeichnis
TEIL 1. Sicherheit geht vor
1.1 CSRF TOKEN
1.2 API-Sicherheitsdesign
1.3 Einige verschiedene Punkte
2.2 Versionsverwaltung
2.3 Gateway-Schnittstelle
2.4 Reverse-Proxy
Die Verwendung von Supervisor als Überwachungstool kann das stabile Überleben des Django-Prozesses sicherstellen. Es ist wichtig, darauf zu achten, dass die Schwachstelle „Supervisord“ bei der Remote-Befehlsausführung vermieden wird, um schwerwiegendere Unfälle zu vermeiden.
Heim Betrieb und Instandhaltung Sicherheit So stellen Sie Django bereit

So stellen Sie Django bereit

May 20, 2023 pm 05:26 PM
django

TEIL 1. Sicherheit geht vor

Der beste Zeitpunkt, Schwachstellen zu beheben, ist während der Entwicklung.

1.1 CSRF TOKEN

Im Sicherheitsframework von Django ist CSRF TOKEN eine entscheidende Sicherheitsstrategie. In vielen Fällen stellen einige Schüler, die gerade erst mit Django in Kontakt gekommen sind, fest, dass das Formular, das sie schließlich geschrieben haben, beim POST einen Fehler meldet. Nach einigen Suchvorgängen stellen sie fest, dass es sich um ein CSRF-TOKEN-Problem handelt, und folgen dann dem Online-Vorgang Methode zum Teilen des Formulars durch drei, fünf und zwei. Alle CSRF TOKEN-Konfigurationen in „settings.py“ wurden entfernt und der Code wurde normal ausgeführt. Sie wissen nicht, dass diese Art von Vorgang die Sicherheit der Website erheblich beeinträchtigen und die Kosten für das Patchen von Schwachstellen in der späteren Phase erhöhen wird. Die Beseitigung von Sicherheitsproblemen während der Entwicklungsphase ist der kostengünstigste.

Da in der offiziellen Dokumentation der relevante Inhalt von CSRF TOKEN ausführlich erläutert wurde, wird die spezifische Verwendung hier nicht beschrieben. Hier empfehlen wir eine komfortablere Nutzung, die für Entwickler während der Entwicklung weniger empfindlich ist und keine besondere Sorgfalt darauf erfordert, ob das Token erfolgreich gesendet wurde.

Fügen Sie {% csrf_token %} zur gesamten übergeordneten Vorlagenseite hinzu und legen Sie Folgendes im Abschnitt <script> fest: </script>

So stellen Sie Django bereit

Auf diese Weise werden alle Nicht-GET|HEAD|OPTIONS| initiiert JQuery TRACE-Anfragen enthalten automatisch CSRF TOKEN (ein Teil des Codes zum Abrufen des CSRF TOKEN ist nicht aufgeführt. Wenn Sie andere HTTP-Bibliotheken oder Fetch verwenden, nehmen Sie einfach die entsprechenden Einstellungen vor).

1.2 API-Sicherheitsdesign

In einigen Fällen stellt unser Webdienst auch einige API-Dienste für Aufrufe von anderen Systemen zur Verfügung. Für diese API-Schnittstellen muss CSRF deaktiviert werden, andernfalls ist dies nicht möglich normal genutzt. Wir sollten auch andere Sicherheitsmaßnahmen ergreifen, um einen Missbrauch von API-Schnittstellen zu verhindern. Zusätzlich zu den normalen Übergabeparametern sollten wir sicherstellen, dass diese Parameter nicht von Zwischenhändlern manipuliert werden und nur autorisierten Personen erlauben, die entsprechende Schnittstelle aufzurufen. Aus diesem Grund müssen wir mehrere zusätzliche Übergabeparameter einführen: Zeitstempel, Vorzeichen usw. access_key, access_token.

Dieses Parameterpaar umfasst access_key und access_token. access_key entspricht der Identifizierung des Anrufers und access_token entspricht dem geheimen Schlüssel des Anrufers. Der Inhalt von access_token sollte nicht leicht vorhersehbar sein, und access_key kann aus Speichergründen eine einfachere Zeichenfolge auswählen. Nur wenn die beiden Parameter übereinstimmen, gilt der API-Aufruf als legal.

Wählen Sie die Genauigkeit des Zeitstempels entsprechend den Geschäftsanforderungen. Sie können zwischen Sekunden und Millisekunden wählen. Der Hauptzweck des Hinzufügens eines Zeitstempels besteht darin, zu verhindern, dass dieser Anruf wiederholt wird. Der Server sollte überprüfen, ob der vom Client übergebene Zeitstempel innerhalb eines Zeitbereichs liegt. Um die Authentizität der Parameter sicherzustellen, muss ein weiteres Parameterzeichen eingeführt werden, denn auch bei der Wiedergabe des Zeitstempels besteht weiterhin die Gefahr einer Manipulation.

sign ist der Signaturwert aller Parameter, der von allen an der Hash-Berechnung beteiligten Parameterwerten generiert wird. Jedes Mal, wenn sich die Parameter geringfügig ändern, muss das Vorzeichen neu generiert werden, um die Authentizität der Parameter sicherzustellen. Ein häufig verwendeter Algorithmus ist: Sortieren Sie den Parameterwert gemäß der alphabetischen Reihenfolge des Parameterschlüssels und verwenden Sie bestimmte Trennzeichen, um alle Parameter zu verbinden. Führen Sie dann eine Hash-Berechnung durch und übergeben Sie die Vorzeichenparameter gemeinsam an den Server. Beispielsweise ist der vorhandene Parameter ak=2222&at=1111&timestamp=3333&key1=aaa nach alphabetischer Sortierung 22221111aaa3333, nach Hinzufügen des Trennzeichens (|) 2222(|)1111(|)aaa(|)3333, und dann berechnet diese Zeichenfolge sha1 und generiert einen Vorzeichenwert. Es ist relativ einfach, es in Python-Code zu schreiben:

So stellen Sie Django bereit

1.3 Einige verschiedene Punkte

Zusätzlich zu den beiden oben genannten wichtigeren Punkten gibt es einige Stellen, die zusätzliche Aufmerksamkeit erfordern.

Deaktivieren Sie den DEBUG-Modus in der Produktionsumgebung.

Setzen Sie die Datei „settings.py“ nicht zur Versionsverwaltung ein und schützen Sie SECRET_KEY.

Verwenden Sie das von Django bereitgestellte ORM Vermeiden Sie nach Möglichkeit die direkte Ausführung von SQL-Anweisungen über Methoden wie .raw(), stellen Sie sicher, dass Sie die Parameter korrekt maskieren, um SQL-Injection-Schwachstellen zu vermeiden. Wenn nötig, deaktivieren Sie Django Admin Verwenden Sie es, ändern Sie es bitte. TEIL 2. So stellen Sie es bereit: Ziehen Sie den Code aus Git, installieren Sie Projektabhängigkeiten und führen Sie den Dienst über manage.py aus , aber planen Sie wirklich, es in der Produktion einzusetzen? Ist das in der Umgebung der Fall?

2.1 Isolierte Umgebung

Unter normalen Umständen gibt es auf unserem Server nur eine Python-Umgebung. Bei der Bereitstellung installieren wir normalerweise die für das Projekt erforderlichen Abhängigkeiten über pip Verzeichnis.

Bei der Bereitstellung mehrerer Projekte kann diese Methode zum Installieren von Abhängigkeiten leicht zu Abhängigkeitskonflikten führen. Um ein einfaches Beispiel zu geben: Wir haben jetzt zwei Projekte, Projekt-A und Projekt-B. Sowohl A als auch B hängen von unterschiedlichen Versionen des Drittanbieterpakets „Third-A“ ab , Die Abhängigkeit von Third-A wird in der globalen Python-Umgebung installiert. Wenn wir pip install -r require-b.txt erneut installieren, wird zu diesem Zeitpunkt auch Third-A erneut installiert, wenn die Versionen von denen die beiden Projekte abhängen sind inkonsistent, zum Beispiel erfordert Projekt A Version 1.0 und Projekt B erfordert Version 2.0, was zu einem Abhängigkeitskonflikt führt und dazu führt, dass die Installation von Abhängigkeiten fehlschlägt.

Wie kann man dieses Problem lösen? Wir können uns leicht vorstellen, dass dieses Problem leicht gelöst werden kann, wenn wir über mehrere unabhängige isolierte Umgebungen verfügen und jedes Projekt in einer unabhängigen Umgebung bereitgestellt wird. Virtualenv wurde entwickelt, um dieses Problem zu lösen. Es kann für jedes Projekt eine separate Betriebsumgebung erstellen, um Abhängigkeitskonflikte zu vermeiden.

2.2 Versionsverwaltung

Wir wussten früher, wie man isolierte Umgebungen erstellt und verschiedene Projekte in verschiedenen Umgebungen bereitstellt, aber es gibt ein Problem. Die von allen Umgebungen verwendete Python-Version ist die gleiche. Wenn Sie zufällig mehrere verschiedene Versionen von Python-Projekten bereitstellen müssen, z. B. Python 2.7 (ich weiß, dass diese Version nicht bald gewartet wird, aber ich werde hier ein Beispiel geben), Python 3.6 und Jython-Projekte, scheint es sinnvoll, sie einzeln zu installieren Etwas kompliziert, selbst beim Kompilieren und Installieren fehlt versehentlich ein bestimmter Kompilierungsparameter und muss neu kompiliert werden, was den Arbeitsaufwand für die Bereitstellung etwas erhöht.

Wir können pyenv verwenden, um die Probleme mehrerer Python-Versionen zu verwalten, und außerdem das Pyenv-Plug-in pyenv-virtualenv verwenden, um die Probleme mehrerer Python-Versionen und mehrerer virtueller Umgebungen zu verwalten.

2.3 Gateway-Schnittstelle

Nachdem wir die Probleme in verschiedenen Umgebungen gelöst haben, ist es an der Zeit, darüber nachzudenken, wie das Projekt ausgeführt werden soll. Wenn Sie an Python manage.py runserver 0.0.0.0:80 denken, ist das etwas zu viel. Einfach.

Django hat eine einfache WSGI-Implementierung integriert, mit der wir den Webdienst über die oben beschriebene Methode starten können. Wenn Sie nur ein paar Leute debuggen oder Dienste bereitstellen möchten, ist dies auch eine optionale Lösung. Es sieht nicht sehr elegant aus.

Wenn Sie die Anwendung wirklich in einer tatsächlichen Produktionsumgebung bereitstellen möchten, benötigen Sie auch einen leistungsstarken WSGI-Server und nicht den einfachen WSGI-Server von Django. Gunicorn und uWSGI sind beide relativ gängige WSGI-Server. Wählen Sie einfach einen davon entsprechend der tatsächlichen Bereitstellungsumgebung aus.

Ich persönlich bevorzuge jedoch Gunicorn, obwohl es in vielen Leistungstests die Oberhand hat. Der Grund für die Wahl von Gunicorn ist, dass es im Vergleich zu uWSGI sehr einfach ist und nicht über sehr komplexe und selten genutzte Funktionen verfügt Seine Funktionen wurden nach und nach von Nginx unterstützt und Gunicorn ist relativ einfach und bequem zu konfigurieren. Beachten Sie außerdem, dass Sie bei der Bereitstellung unter Windows möglicherweise Apache+mod_wsgi verwenden müssen.

2.4 Reverse-Proxy

Nachdem unser WSGI-Server gestartet wurde, müssen wir das Problem des Reverse-Proxys berücksichtigen. Der Grund, warum es eine andere Ebene von Nginx gibt, um Reverse-Proxy auszuführen, ist aus folgenden Gründen:

Nginx ist erforderlich Umgang mit statischen Ressourcen. Wenn Sie den DEBUG-Modus von Django auf „False“ setzen, werden Sie feststellen, dass viele statische Ressourcen wie CSS und JS nicht geladen werden können. Dies liegt daran, dass Django diese Anfragen nicht aktiv verarbeitet und Nginx bei der Verarbeitung helfen muss um den Lastausgleich mehrerer Backends durchzuführen. Wenn Ihr Dienst auf mehreren Servern bereitgestellt wird oder über eine primäre und eine Backup-Bereitstellung verfügt, können diese durch einfache Einstellungen auf Nginx erreicht werden.

Es gibt bestimmte Probleme beim direkten Aufdecken von uWSGI- oder Gunicorn-Sicherheitsrisiken Verwenden Sie Nginx, um HTTP-Probleme zu lösen.

Darüber hinaus gibt es einige Gründe, die hier nicht aufgeführt sind. Auch hier gilt: Wenn Ihr Dienst sehr einfach ist und nur wenige Personen darauf zugreifen, müssen Sie keine derart komplizierten Einstellungen vornehmen .

2.5 Process Daemon

Ab sofort haben wir den Dienst erfolgreich bereitgestellt und können mit der normalen Bereitstellung von Diensten beginnen. Aber wir denken weniger darüber nach, wenn unser Django aus irgendeinem unbekannten Grund leider beendet wird, wird unser Webdienst zu einem 502. Um die Stabilität des Dienstes sicherzustellen, müssen wir den Django-Prozess schützen. Wenn ein unbekanntes Problem auftritt und einen abnormalen Exit verursacht, muss der erforderliche Prozess automatisch aufgerufen werden.

Die Verwendung von Supervisor als Überwachungstool kann das stabile Überleben des Django-Prozesses sicherstellen. Es ist wichtig, darauf zu achten, dass die Schwachstelle „Supervisord“ bei der Remote-Befehlsausführung vermieden wird, um schwerwiegendere Unfälle zu vermeiden.

TEIL 3. Hintergrunddienst

Wenn Sie einen Hintergrunddienst starten möchten, ist Sellerie im Allgemeinen eine universelle Wahl, aber oft möchten wir keine so starke Abhängigkeit einführen, also müssen wir einen Weg finden, dies zu tun Starten Sie den Hintergrunddienst selbst.

Eine einfache Methode besteht darin, den Befehl manage.py zu erteilen, unseren Hintergrunddienst über ./manage.py runcommand zu starten und den Start und Stopp des Dienstes durch das Schreiben eines Shell-Skripts zu steuern oder ihn über Supervisor zu verwalten.

Wenn Sie möchten, dass der Hintergrundprozess gleichzeitig mit dem Webdienst gestartet und gestoppt wird, ist es eine gute Wahl, ihn in wsgi.py einzufügen. Initialisieren Sie den entsprechenden Hintergrunddienst in wsgi.py und starten Sie ihn. Dieser Ansatz ist jedoch nicht flexibel genug. Wenn der Webdienst oder der Hintergrunddienst separat aktualisiert werden müssen, müssen beide Dienste neu gestartet werden. Mit der ersten Methode kann jedoch einer der Dienste separat aktualisiert werden.

Das obige ist der detaillierte Inhalt vonSo stellen Sie Django bereit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So überprüfen Sie die Django-Version So überprüfen Sie die Django-Version Dec 01, 2023 pm 02:25 PM

Schritte zum Überprüfen der Django-Version: 1. Öffnen Sie ein Terminal- oder Eingabeaufforderungsfenster. 2. Stellen Sie sicher, dass Django nicht installiert ist, können Sie es mit dem Paketverwaltungstool installieren und den Befehl pip install django eingeben. 3. Nachdem die Installation abgeschlossen ist, können Sie python -m django --version verwenden, um die Django-Version zu überprüfen.

Django vs. Flask: Eine vergleichende Analyse von Python-Web-Frameworks Django vs. Flask: Eine vergleichende Analyse von Python-Web-Frameworks Jan 19, 2024 am 08:36 AM

Django und Flask sind beide führend bei Python-Web-Frameworks und haben beide ihre eigenen Vorteile und anwendbaren Szenarien. In diesem Artikel wird eine vergleichende Analyse dieser beiden Frameworks durchgeführt und spezifische Codebeispiele bereitgestellt. Entwicklungseinführung Django ist ein Web-Framework mit vollem Funktionsumfang, dessen Hauptzweck darin besteht, schnell komplexe Webanwendungen zu entwickeln. Django bietet viele integrierte Funktionen wie ORM (Object Relational Mapping), Formulare, Authentifizierung, Verwaltungs-Backend usw. Diese Funktionen ermöglichen es Django, große Mengen zu verarbeiten

Vor- und Nachteile des Django Framework: Alles, was Sie wissen müssen Vor- und Nachteile des Django Framework: Alles, was Sie wissen müssen Jan 19, 2024 am 09:09 AM

Django ist ein vollständiges Entwicklungsframework, das alle Aspekte des Webentwicklungslebenszyklus abdeckt. Derzeit ist dieses Framework eines der beliebtesten Web-Frameworks weltweit. Wenn Sie vorhaben, mit Django Ihre eigenen Webanwendungen zu erstellen, müssen Sie die Vor- und Nachteile des Django-Frameworks verstehen. Hier finden Sie alles, was Sie wissen müssen, einschließlich spezifischer Codebeispiele. Vorteile von Django: 1. Schnelle Entwicklung – Djang kann Webanwendungen schnell entwickeln. Es bietet eine umfangreiche Bibliothek und interne

So überprüfen Sie die Django-Version So überprüfen Sie die Django-Version Nov 30, 2023 pm 03:08 PM

So überprüfen Sie die Django-Version: 1. Um die Django-Version zu überprüfen, geben Sie den Befehl „python -m django --version“ im Terminal- oder Befehlszeilenfenster ein. 2. Um in der interaktiven Python-Umgebung zu überprüfen, geben Sie „import django“ ein print(django. get_version())“-Code; 3. Überprüfen Sie die Einstellungsdatei des Django-Projekts und finden Sie eine Liste mit dem Namen INSTALLED_APPS, die Informationen zur installierten Anwendung enthält.

So aktualisieren Sie die Django-Version: Schritte und Überlegungen So aktualisieren Sie die Django-Version: Schritte und Überlegungen Jan 19, 2024 am 10:16 AM

So aktualisieren Sie die Django-Version: Schritte und Überlegungen, spezifische Codebeispiele erforderlich. Einführung: Django ist ein leistungsstarkes Python-Web-Framework, das kontinuierlich aktualisiert und aktualisiert wird, um eine bessere Leistung und mehr Funktionen bereitzustellen. Für Entwickler, die ältere Versionen von Django verwenden, kann die Aktualisierung von Django jedoch einige Herausforderungen mit sich bringen. In diesem Artikel werden die Schritte und Vorsichtsmaßnahmen zum Aktualisieren der Django-Version vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Sichern Sie die Projektdateien, bevor Sie Djan aktualisieren

Ist Django Front-End oder Back-End? Ist Django Front-End oder Back-End? Nov 21, 2023 pm 02:36 PM

Django ist das Backend. Details: Obwohl Django in erster Linie ein Backend-Framework ist, ist es eng mit der Frontend-Entwicklung verbunden. Durch Funktionen wie die Template-Engine von Django, die statische Dateiverwaltung und die RESTful-API können Front-End-Entwickler mit Back-End-Entwicklern zusammenarbeiten, um leistungsstarke, skalierbare Webanwendungen zu erstellen.

Was ist der Unterschied zwischen Django-Versionen? Was ist der Unterschied zwischen Django-Versionen? Nov 20, 2023 pm 04:33 PM

Die Unterschiede sind: 1. Django 1.x-Serie: Dies ist eine frühe Version von Django, einschließlich der Versionen 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 und 1.9. Diese Versionen bieten hauptsächlich grundlegende Webentwicklungsfunktionen. 2. Django 2.x-Serie: Dies ist die Zwischenversion von Django, einschließlich 2.0, 2.1, 2.2 und anderen Versionen. 3. Django 3.x-Serie: Dies ist die neueste Version Serie von Django. Einschließlich der Versionen 3.0, 3 usw.

Ist Django Front-End oder Back-End? Hör zu! Ist Django Front-End oder Back-End? Hör zu! Jan 19, 2024 am 08:37 AM

Django ist ein in Python geschriebenes Webanwendungs-Framework, das Wert auf schnelle Entwicklung und saubere Methoden legt. Obwohl Django ein Web-Framework ist, müssen Sie zur Beantwortung der Frage, ob Django ein Front-End oder ein Back-End ist, ein tiefes Verständnis der Konzepte von Front-End und Back-End haben. Das Front-End bezieht sich auf die Schnittstelle, mit der Benutzer direkt interagieren, und das Back-End bezieht sich auf serverseitige Programme. Sie interagieren mit Daten über das HTTP-Protokoll. Wenn das Front-End und das Back-End getrennt sind, können die Front-End- und Back-End-Programme unabhängig voneinander entwickelt werden, um Geschäftslogik bzw. interaktive Effekte sowie den Datenaustausch zu implementieren.

See all articles