Hallo Pythonfreunde,
ich möchte eine Webapp mit Datenbank bauen, um eine Art Buchhaltung bzw. Buchhaltungsdaten zu erfassen.
Da diese App permanent laufen soll im Netzwerk, sollte es natürlich recht gut abgesichert sein von außen.
Wie würdet ihr sowas angehen? Https, Dockersicherung? Oder reicht da schon die ganz normale Anbindung der Datenbank + Webapp von bspw Flask und SQLAlchemy?
Danke für eure Ideen und Input.
Grüße
Karlirex
Sicherung von Anwendungen
Eine einfache Antwort darauf gibt es nicht.
HTTPS gehört zum Standard. Was meinst Du mit Dockersicherung? Von außen sollten Datenbanken nicht zugreifbar sein, dafür gibt es Firewalls, Reverseproxies, Load-Balancers, etc.
Aber das ist ja nur die eine Seite. Deine Webapp muß auch fehlerfrei sein, also nur autorisierte Zugriffe zulassen, alle Daten validieren.
Dann braucht es ein gutes Monitoring, um Angriffe zu erkennen zu können.
HTTPS gehört zum Standard. Was meinst Du mit Dockersicherung? Von außen sollten Datenbanken nicht zugreifbar sein, dafür gibt es Firewalls, Reverseproxies, Load-Balancers, etc.
Aber das ist ja nur die eine Seite. Deine Webapp muß auch fehlerfrei sein, also nur autorisierte Zugriffe zulassen, alle Daten validieren.
Dann braucht es ein gutes Monitoring, um Angriffe zu erkennen zu können.
Docker ist kein Sicherheitsmechanismus und sollte so auch nicht verwendet bzw. gesehen werden. Wenn man es nicht sauber implementiert, kann es unter bestimmten Umständen sogar eher das Gegenteil sein.
Allerdings sind die Sicherheitspunkte dann weniger von der Programmierung abhängig, als von der Umgebung im Netzwerk etc oder?Sirius3 hat geschrieben: Sonntag 6. Februar 2022, 14:38 Eine einfache Antwort darauf gibt es nicht.
HTTPS gehört zum Standard. Was meinst Du mit Dockersicherung? Von außen sollten Datenbanken nicht zugreifbar sein, dafür gibt es Firewalls, Reverseproxies, Load-Balancers, etc.
Aber das ist ja nur die eine Seite. Deine Webapp muß auch fehlerfrei sein, also nur autorisierte Zugriffe zulassen, alle Daten validieren.
Dann braucht es ein gutes Monitoring, um Angriffe zu erkennen zu können.
Ich mein in der Webapp kenn ich das mit der Authentifizierung, durch Accounts bspw. Aber wie verhinder ich denn bspw einen direkten Connect auf die Datenbank, wenn jemand die URL (Host) der Seite dazu nutzen könnte. Oder dadurch dass die DB im Netzwerk läuft, diese wahrscheinlich eine Netzwerk ähnliche Addresse hat und man sich ja da auch zu connecten kann, so wie ich es für die normale Nutzung auch mache.
Ja genau, ob und wie Du Dich zu der Datenbank verbinden kannst, hängt von der Konfiguration Deines Netzwerkes ab. Das hat nichts mit Python zu tun.
Aus Deiner Frage wird nicht ganz klar, in welcher Umgebung Du das alles laufen hast. Was bedeutet „außen” und was ist mit „Netzwerk” gemeint?
Normalerweise hat man ein internes Netzwerk, von dem man direkt auf Datenbanken zugreifen kann, und ein äußeres Netzwerk, das durch entsprechende Gateways vom internen Netzwerk getrennt ist und nur bestimmte Dienste durchläßt. Idealerweise nur den Port des Reverse-Proxies.
Aus Deiner Frage wird nicht ganz klar, in welcher Umgebung Du das alles laufen hast. Was bedeutet „außen” und was ist mit „Netzwerk” gemeint?
Normalerweise hat man ein internes Netzwerk, von dem man direkt auf Datenbanken zugreifen kann, und ein äußeres Netzwerk, das durch entsprechende Gateways vom internen Netzwerk getrennt ist und nur bestimmte Dienste durchläßt. Idealerweise nur den Port des Reverse-Proxies.
Das ganze läuft auf einem Firmenrechner der im Netzwerk ist. Das durchlassen der Dienste wäre aber ja nur fürs Netzwerk etwas oder? Also das nicht Nutzer A, B, C auf die Daten zugreifen kann sondern nur Nutzer A.Sirius3 hat geschrieben: Sonntag 6. Februar 2022, 15:16 Ja genau, ob und wie Du Dich zu der Datenbank verbinden kannst, hängt von der Konfiguration Deines Netzwerkes ab. Das hat nichts mit Python zu tun.
Aus Deiner Frage wird nicht ganz klar, in welcher Umgebung Du das alles laufen hast. Was bedeutet „außen” und was ist mit „Netzwerk” gemeint?
Normalerweise hat man ein internes Netzwerk, von dem man direkt auf Datenbanken zugreifen kann, und ein äußeres Netzwerk, das durch entsprechende Gateways vom internen Netzwerk getrennt ist und nur bestimmte Dienste durchläßt. Idealerweise nur den Port des Reverse-Proxies.
Also würde die Absicherung außerhalb der Firma durch die Netzwerksicherung der Firma gesichtert?
Das "interne" sichern ist schon recht wichtig (da dann ggf. keine neugierigen Mitarbeiter da etwas suchen/sehen könnten), aber nach "außen" eben nochmal wichtiger.
Wenn du in einer Firma arbeitest, und es gibt da Leute, die sich mit IT und hoffentlich auch IT-Sicherheit beschaeftigen, dann solltest du mit *denen* darueber reden. Wir koennen dazu ausser Gemeinplaetzen nix sagen, wir kennen ja dein Netzwerk nicht.
Grundsätzlich solltest du eine Sicherheit nach dem Zwiebelprinzip erreichen, immer mehrere Schichten, die sich idealerweise überlagern. Außerdem gilt in der IT-Security alles raus das keine Miete zahlt, dass soll heißen Dienste, Service und Programmcode der nicht da ist, kann nicht angegriffen werden, also arbeite nach einem Whitelist Prinzip, das System ist vernagelt und wird gezielt geöffnet.
Ich Arbeit gerne nach den STRIDE Model. Als Erstes definiert man dabei den Angriffsvektoren, gegen den man sich schützen will und findet dann eine Mitigation, für diesen Vektor. Grade das Erarbeiten der möglichen Angriffsvektoren und passenden Mitigation, ist Teamarbeit, ein Brainstorming ist oft sehr effizient.
Das Ergebnis solltest du gruppieren, ich verwende gerne:
Nötige Wissen des Angreifers, Schwierigkeitsgrad des Angriffs, ist physischer Zugriff notwendig, was ist der Worstcase Schaden, wie aufwändig sind die Mitigation. Draus ergibt sich eine Prioritätenliste, welche dann einfach abgearbeitet wird.
Spätesten am Ende lohnt es sich, externe Hilfe zu hohlen, wenn alle Threads gesichert sind. Sollte man ein Pentesting Team das Ergebnis gegenchecken zu lassen, wichtig das Red-team, sollte definitiv nicht bei der Entwicklung dabei gewesen sein, Menschen werden Betriebsblind und wenn die euch schon bei der Implementierung beraten haben, werden die nichts finden.
Ich Arbeit gerne nach den STRIDE Model. Als Erstes definiert man dabei den Angriffsvektoren, gegen den man sich schützen will und findet dann eine Mitigation, für diesen Vektor. Grade das Erarbeiten der möglichen Angriffsvektoren und passenden Mitigation, ist Teamarbeit, ein Brainstorming ist oft sehr effizient.
Das Ergebnis solltest du gruppieren, ich verwende gerne:
Nötige Wissen des Angreifers, Schwierigkeitsgrad des Angriffs, ist physischer Zugriff notwendig, was ist der Worstcase Schaden, wie aufwändig sind die Mitigation. Draus ergibt sich eine Prioritätenliste, welche dann einfach abgearbeitet wird.
Spätesten am Ende lohnt es sich, externe Hilfe zu hohlen, wenn alle Threads gesichert sind. Sollte man ein Pentesting Team das Ergebnis gegenchecken zu lassen, wichtig das Red-team, sollte definitiv nicht bei der Entwicklung dabei gewesen sein, Menschen werden Betriebsblind und wenn die euch schon bei der Implementierung beraten haben, werden die nichts finden.