Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sicherheit eines offenen Querys (https://www.delphipraxis.net/71713-sicherheit-eines-offenen-querys.html)

Mr_G 19. Jun 2006 21:17

Datenbank: MySQL • Version: 5.0 • Zugriff über: Zeos

Sicherheit eines offenen Querys
 
Hallo,
ich habe mal eine hoffentlich leicht zu lösende Geschichte:
Und zwar schreibe ich gerade in einem zweier-Team an einer Verwaltungssoftware und stehe vor einem Problem: Ich möchte eine Tabelle in mein Programm auslesen und bearbeiten. So weit so gut. Ich hätte jetzt spontan ein Query genommen, eine entsprechende Abfrage formuliert, das ganze mittels Connection und DataSource etc. verbunden und in ein DataGrid lesen lassen... das Ganze zur Laufzeit aktivieren - fertig wäre die Schose.

Nun möchte mich mein "Mitentwickler" aber dazu überreden die Daten einmal in ein normales Grid o.ä. auszulesen um das Query dann schließen zu können. Als Begründung erklährte er mir, dass ein ("lange") offenes Query eine Sicherheitslücke darstellt.

Ich sehe in dem Ganzen jedoch nur eine Menge Arbeit die eher schadet als nützt, denn ich denke, dass Borland sich bei seinen Datensteuerungskomponenten was gedacht hat und es diese bestimmt nicht ohne Grund gibt (große Datenmengen z.B.?).

Mein Frage(n) lautet(n) nun:
Ist ein offenes Query eine Sicherheitslücke?
Wenn ja, wie groß (mit nem Sniffer und viel Zeit knackt man alles)?
Und wie sollte ich das Auslesen umsetzen, damit ich sowohl auf der sicheren als auch auf der einfachen und performaten Seite bin?

Danke im Voraus

Mr_G

mkinzler 19. Jun 2006 21:21

Re: Sicherheit eines offenen Querys
 
Wo befinden sich Server/Client. Wieviele Clients?

Mr_G 19. Jun 2006 22:11

Re: Sicherheit eines offenen Querys
 
Server und Client befinden sich wahrscheinlich in einem eigenen VLAN.
Außerdem gehe ich von mindestens 2 bis 3 Clients aus (möglich sollten natürlich auch mehr sein aber aktuell gibt es noch keine obere Grenze).

negaH 20. Jun 2006 09:05

Re: Sicherheit eines offenen Querys
 
Hm, ich sehe keinen Unterschied in der Sicherheit bei deiner Query und einer lokal zwischengespeicherten Abfrage.
Benutzt du zb. bei deiner Query Cached Updates, so hat dies zum Erfolg das einmalig alle Datensätze deiner Abfrage lokal geladen werden und dann nur auf dem lokalen Dataset gearbeitet wird. In diesem Moment wird zeitlich gesehen ja auch nur eine Abfrage gesendet und komplett alle Resultate geladen. Aus Sicht des Netzwerk Traffics ergibt sich ein identischer zeitlicher Verlauf zu dem Vorschlag deinen Mitentwicklers. Das heist dann auch das bei beiden Varianten identische Sicherheist-"lücken" exisistieren müssen, und defakto keinerlei Unterschied mehr existiert. Beides wäre gleichermaßen sicher wie auch unsicher.
Aber der relevante Unterschied wäre das du die einmal weniger und das anderemal viel mehr zusätzlichen Programmieraufwand einhandelst.

Ich meine also: bleibe bei deiner normalen Abfrage da es aus Sicherheitsaspekten keinerlei Unterschiede macht. Du könntest noch Query.CachedUpdates := True setzen um die Datenmenge in einem Rutsch lokal zu laden.

Lass dir von deinem Mitstreiter mal erklären WARUM das unsicherer sein sollte (mit Fakten und eventuellen Links).

Normalerweise versucht das Grid der VCL nur diejenigen Daten zu laden die es auch anzeigt. Wenn wir mal von 1000 Datensätzen ausgehen bei denen aber nur 10 im Grid angezeigt werden können, dann ergäbe sich folgendes Bild:

Angreifer lauscht passiv am TCP/IP Traffic und kann somit nur mitschneiden und nicht interaktiv abfragen.
Das Grid wird nur die ersten 10 Datensätze anfordern zu Anzeige, von 1000 möglichen. Scrollt der Anwender niemals im Grid so kann der Angreifer nur 10 Datensätze mitschneiden, also niemals alle 1000.

Holst du aber per Cached Updates oder mit der Methode deines Mitstreiters sofort alle 1000 Datensätze ab um sie lokal zu speichern, wird der Angreifer auch alle 1000 Datensätze mitschneiden können.

Es ist also sogar so das es damit unsicherer wäre.

All dies setzt erstmal vorraus das die Kommunikation übers TCP/IP unverschlüsselt ist. Dies lässt sich aber über VPN Verbindungen extern ziemlich einfach verschlüsslt absichern.

Gruß Hagen

franktron 20. Jun 2006 09:36

Re: Sicherheit eines offenen Querys
 
Also ich kann mich da Hagen nur anschliessen.

Also wenn man alle Daten aufeinmal holt wird sich der Anwender wohl bedanken das er soviele Kaffenpausen machen darf :-D

und wenn man die kommunikation sicher haben will stellt man den Mysql Server auf SSL kommunikation um, das sollte auch mit Zeos gehen glaub ich.

Mr_G 20. Jun 2006 18:26

Re: Sicherheit eines offenen Querys
 
Danke erstmal für die ausführlichen Erklärungen!

Ich habe noch mal mit meinem Mitentwickler gesprochen und seine Skepsis gründete nur auf Halbwissen und ein par Vermutungen.

Die Verschlüsselung per VPN hatten wir beide aufgrund anderer Gegebenheiten in Bezug auf das Projekt auch im Hinterkopf und werden VPN daher wahrscheinlich auch einsetzen.
Die Idee mit der Konfiguration des MySQL-Servers für SSL hört sich auch super an!

Fazit: Vielen Dank für die schnelle und kompetente Hilfe!
Ihr habt mir eine Menge Arbeit und Nerven erspart!

Mr_G


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz