Webanwendung sicher hosten (Django)

OP #7506641
Lesenswert?

Hallo zusammen,

ich habe eine kleine Webanwendung (mit Django) programmiert. Die läuft auch schon lokal auf einem kleinen Linux Server (armbian) auf einem SBC (ähnlich RaspberryPi). Ich nutze hier nginx und uwsgi. Bisher war ich damit zufrieden, dass das Ganze irgendwie funktioniert. Wenn ich das aber Produktiv und in ferner Zukunft vielleicht kommerziell nutzen möchte, sollte es natürlich auch möglichst sicher sein.

Wie macht man sowas, Stand heute? Ich habe da schon so Stichwörter wie SE-Linux und Container gehört. Bevor ich da aber viel Zeit investiere, würde ich gerne wissen was da aktuell so die übliche Vorgehensweise ist?

#7506891
Lesenswert?

Heinz-R. schrieb:

ich habe eine kleine Webanwendung (mit Django) programmiert. Die läuft auch schon lokal auf einem kleinen Linux Server (armbian) auf einem SBC (ähnlich RaspberryPi). Ich nutze hier nginx und uwsgi. Bisher war ich damit zufrieden, dass das Ganze irgendwie funktioniert. Wenn ich das aber Produktiv und in ferner Zukunft vielleicht kommerziell nutzen möchte, sollte es natürlich auch möglichst sicher sein.

Naja, "möglichst sicher" ist im Zweifelsfall ein weites Feld, wie Thomas "werists" bereits ausgeführt hat...

Wie macht man sowas, Stand heute? Ich habe da schon so Stichwörter wie SE-Linux und Container gehört. Bevor ich da aber viel Zeit investiere, würde ich gerne wissen was da aktuell so die übliche Vorgehensweise ist?

Die übliche Vorgehensweise ist zunächst, die Anwendung selbst möglichst "sicher" zu entwickeln. Das heißt, von der Eingabevalidierung bis hin zum Datenbackend alles so restriktiv wie möglich zu beschränken, bei Djangos Formularframework beispielsweise die Validatoren für die Forumlareingaben und in Djangos ORM für die Datenbank die Constraints für die Spalten und solche Dinge wie Fremdschlüssel (Foreign Keys) und so weiter. Im Zweifel kann es sogar sinnvoll sein, in der Datenbank zusätzlich zu dem, was der ORM erzeugt, noch eigene Constraints und Triggerfunktionen einzufügen.

Der nächste Schritt ist dann eine erstmalige Bedrohungsanalyse, also: sich ganz genau anzuschauen, wo mögliche Angriffspunkte sind, zu überlegen, was Angreifer bezwecken und was sie dazu tun könnten. Welche Daten sind dabei besonders sensibel hinsichtlich sicherheitstechnischer und gesetzlicher Aspekte? Können diese Daten mit kryptografischen Methoden, also eventuell einer Einweg- (Hashing), symmetrischer oder asymmetrischer Verschlüsselung geschützt werden? Diese Bedrohungsanalyse sollte während des Betriebs der Seite regelmäßig wiederholt werden.

Da Du leider nichts darüber sagst, was Deine Applikation tut und wer die Zielgruppe ist, fällt es mir schon an dieser Stelle nicht gerade leicht, Dir weitere Hinweise zu geben, sonst würde das hier zu allgemein und zu umfangreich, und Dir daher auch keine Hilfe. Vielleicht magst Du etwas genauer ausführen, worum es genau geht?

#7506894
Lesenswert?

Ein T. schrieb:

Da Du leider nichts darüber sagst, was Deine Applikation tut und wer die Zielgruppe ist

Das ist der erste Teil des Sicherheitskonzepts 😉

Aber jetzt wieder ernsthaft.

Sicherheit ist kein Zustand, sondern ein Prozess.

Keine Ahnung,woher dieser kluge Spruch stammt, aber er klingt sehr plausibel. Meine Webanwendungen liegen alle auf Servern, die ich nicht managen muss. Auch wenn das mehr Geld kostet, als alles selbst zu hosten. Somit muss ich nur meine Anwendungen im Griff haben.

#7506960
Lesenswert?

Kolja L. schrieb:

Meine Webanwendungen liegen alle auf Servern, die ich nicht managen muss. Auch wenn das mehr Geld kostet, als alles selbst zu hosten. Somit muss ich nur meine Anwendungen im Griff haben.

Die eigene Verantwortung auf andere Abwälzen geht oftmals ganz arg nach hinten los. Ich habe in unserer Firma schon so einige ihren Stuhl räumen sehen, aus genau diesem Grund. Denn im Endeffekt und am Schluss der Nahrungskette stehst immer noch DU hinter deinem Produkt und DU musst dir dafür deine Pantoffeln anziehen.

Wie man eine Webanwendung sicher ins öffentliche Netz bringt. Ist der kleinste Teil des Sicherheitskonzeptes. Ich schätze das die Einfallstore bei Webanwendungen zu 95% die Anwendungen selber sind und nicht der Unterbau.

Wie man sicher einen NGINX oder Apache Server aufzieht findest du zu tausende im Netz. Welche Ports braucht denn deine Anwendung, die üblichen 443 und 80?

#7506976
Lesenswert?

Rene K. schrieb:

Die eigene Verantwortung auf andere Abwälzen geht oftmals ganz arg nach hinten los.

Irgendwo "muss" man ja eine Grenze ziehen. Ich produziere weder den Strom, noch ziehe ich den Si-Kristall, auch das überlasse ich erfahreneren Menschen und bezahle sie dafür.

Wo die eigene Grenze liegt, sollte jeder bewusst und wohlüberlegt entscheiden.

Aber lass uns mal nicht über meine, sondern die Anwendung des TO sprechen.

Uberspace hat da was passendes: https://lab.uberspace.de/guide_django/

Ich könnte mir aber vorstellen, dass es Vorbehalte gegen diesen Hoster geben wird 😝

OP #7507046
Lesenswert?

Ein T. schrieb:

Da Du leider nichts darüber sagst, was Deine Applikation tut und wer die Zielgruppe ist, fällt es mir schon an dieser Stelle nicht gerade leicht, Dir weitere Hinweise zu geben, sonst würde das hier zu allgemein und zu umfangreich, und Dir daher auch keine Hilfe. Vielleicht magst Du etwas genauer ausführen, worum es genau geht?

Stimmt schon. Die Beschreibung "Django Anwendung" war sicher etwas knapp. Im Prinzip sind die Daten nicht besonders sicherheitsrelevant, also keine personenbezogenen Sachen oder so. Im Grunde werden da in der Datenbank (SQLite) Textbausteine angelegt, von denen dann später eine Auswahl der Datensätze mit Reportlab als PDF Datei ausgegeben wird.

OP #7507048
Lesenswert?

Kolja L. schrieb:

Ein T. schrieb:

Da Du leider nichts darüber sagst, was Deine Applikation tut und wer die Zielgruppe ist

Das ist der erste Teil des Sicherheitskonzepts 😉

Aber jetzt wieder ernsthaft.

Sicherheit ist kein Zustand, sondern ein Prozess.

Keine Ahnung,woher dieser kluge Spruch stammt, aber er klingt sehr plausibel. Meine Webanwendungen liegen alle auf Servern, die ich nicht managen muss. Auch wenn das mehr Geld kostet, als alles selbst zu hosten. Somit muss ich nur meine Anwendungen im Griff haben.

Das ist natürlich auch ein Ansatz. Gibt es Anbieter, die sich da um alles kümmern? Ich schicke denen die Django Anwendung und die kümmern sich um die ganze Konfiguration?

OP #7507050
Lesenswert?

Rene K. schrieb:

Wie man eine Webanwendung sicher ins öffentliche Netz bringt. Ist der kleinste Teil des Sicherheitskonzeptes. Ich schätze das die Einfallstore bei Webanwendungen zu 95% die Anwendungen selber sind und nicht der Unterbau.

Das ist ja mein Problem. Ich habe nicht die Erfahrung einschätzen zu können ob meine Anwendung wirklich sicher ist. Lässt sich die Webanwendung irgendwie einhegen (kapseln), so dass ein erfolgreicher Hacker aus der Anwendung heraus nicht das ganze System kompromittieren kann?

Wie man sicher einen NGINX oder Apache Server aufzieht findest du zu tausende im Netz. Welche Ports braucht denn deine Anwendung, die üblichen 443 und 80?

Die Anwendung arbeitet nur mit Texten und erzeugt daraus ein PDF (reportlab). Nur die üblichen Ports.

#7507263
Lesenswert?

Heinz-R. schrieb:

Das ist natürlich auch ein Ansatz. Gibt es Anbieter, die sich da um alles kümmern? Ich schicke denen die Django Anwendung und die kümmern sich um die ganze Konfiguration?

Oh, die gibt es bestimmt, aber der "übliche" Weg ist, dass dir jmd die Infrastruktur zur Verfügung stellt und du darauf deine App betreibst.

Check mal UberSpace, mein letzter Link, die haben sehr detaillierte Anleitungen und kosten fast nix. Und wenn du keine tausende Zugriffe pro Minute erwartest, sollte es einen Versuch wert sein.

#7507316
Lesenswert?

Heinz-R. schrieb:

Im Prinzip sind die Daten nicht besonders sicherheitsrelevant, also keine personenbezogenen Sachen oder so. Im Grunde werden da in der Datenbank (SQLite) Textbausteine angelegt, von denen dann später eine Auswahl der Datensätze mit Reportlab als PDF Datei ausgegeben wird.

"Personenbezogene Daten" können natürlich auch E-Mail-Adressen, Logindaten und Ähnliches sein, eventuell auch die Textfragmente in Deiner DB. Je nach Datenschutzbeauftragtem sind sogar alle Logindaten personenbezogen, denn eine Authentifizierung soll ja gerade sicherstellen, daß ein Benutzer der ist, der er zu sein vorgibt.

Außerdem ist die Frage, wie die Textfragmente in die DB kommen und wer da Zugang hat -- in Textdaten, die dann in ein PDF verwurstet werden, könnte ein Angreifer beispielsweise Codefragmente einfügen, die bei der Anzeige Deiner PDFs ausgeführt werden könnten [1]. Daher ist es sicher sinnvoll, die Textfragmente bei der Eingabe zu prüfen und / oder zu filtern.

Außerdem sollen die Textfragmente ja ausgewählt werden können, wenn ich das richtig verstehe. Üblicherweise würde man das bei einer SQL-Datenbank (oder auch bei SQLite) über die ID der Datensätze machen, das heißt: Deine User geben eine ID ein, und die mußt Du natürlich überprüfen. Bei einer ID wird das vermutlich relativ einfach sein, die fortgeschrittene Validierung kann aber auch überprüfen, ob eingegebene IDs in der Datenbank vorhanden sind.

Dann ist zudem die Frage, wie die Benutzeraccounts angelegt werden. Wenn jeder sich dort registrieren kann, sind auch diese Daten penibel zu prüfen, wenngleich der ORM von Django viele Angriffsmöglichkeiten wie zum Beispiel SQL-Injections recht wirksam unterbinden sollte. Aber auch hier gilt: je strenger die Validierung Deiner Formulareingaben ist, desto früher kannst Du böswillige Eingaben abfangen und darauf reagieren. Die Validatoren von Django (zB. RegexValidator) sind Deine Freunde! :-)

Was das Hosting selbst angeht, ist auch die Frage, wieviel Besucher und Traffic Du erwartest, ob Du Geld für Sicherheit ausgeben willst, indem Du beispielsweise ein sicherheitszertifiziertes Hosting (PCI-DSS, HIPAA, SOC) wählst... kostet extra Geld, kann aber je nach Sensibilität Deiner Daten eine lohnenswerte Investition sein. An diesen Fragen hängt auch, welche Technologien Du wählst, ob Docker-Container in einer Public Cloud oder bekannte Anbieter mit eigenen Lösungen wie Heroku oder oder oder... Dazu kann ich allerdings leider relativ wenig sagen, ich hoste meine privaten Anwendungen auf einem eigenen, selbstgepflegten Cluster mit Docker Swarm und das Businesszeug meiner Arbeit- und Auftraggeber auf zertifizierten Managed-Servern bei Atlantic.NET -- das ist aber sehr teuer.

[1] https://helpx.adobe.com/de/acrobat/using/javascripts-pdfs-security-risk.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren