| Autor |
Beitrag |
cyberbug
      
Beiträge: 53
WIN XP
|
Verfasst: Fr 20.03.09 18:10
Hi,
ich habe folgendes Problem(nachdem ich übrigens auch schon reichlich gesucht habe...):
Folgende Situation:
Ich habe eine MySQL Datenbank, die im Internet gehostet ist. Dort werden unter Anderem registrierte User verwaltet. Ich möchte jetzt eine Möglichkeit bieten, aus einem Delphi Programm heraus auf die Datenbank zugreifen zu können. User sollen sich mit Name und Passwort ganz einfach anmelden können.
Bei meiner Suche ist herausgekommen, dass man mit Delphi aufgrund von bestimmten Sicherheitsvorkehrungen nicht einfach so auf im Internet liegende Datenbanken zugreifen kann(wenn das Programm nicht auf dem server liegt). Nachforschungen haben gezeigt, dass ich mir dafür ein PHP-Script basteln könnte, welches dann ja serverseitig laufen würde und mit welchem ich dann aus der Datenbank lesen und eventuell auch Dinge verändern könnte. Wie es der Zufall so will kann ich bereits PHP(so mittelmässig...).
Meine Frage ist nun, ob schonmal jemand sowas gemacht hat und wenn ja, ob er mir Tipps geben kann, wie er es gemacht hat. Auf die Datenbank zuzugreifen(mit PHP) ist nicht schwer, aber so wie mein Programm dieses Script dann aufruft, so könnte dass dann ja jeder.
Und ausserdem sollte der Datenverkehr ja auch irgendiwe verschlüsslt werden(sollte er das überhaupt?). Ich weiss nur nicht wie. Über Links und Meinungen zu den entsprechenden Themen würde ich mich sehr freuen.
Danke im vorraus.
MFG cyberbug
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 20.03.09 20:58
Sorry, aber wer lesen kann, ist klar im Vorteil - und sei es das MySQL-Handbuch.
Dass man nicht von außerhalb auf einen MySQL-Server zugreifen kann ist nur die Default-Einstellung, die man jedoch jederzeit ändern kann. Das ist allerdings nicht sinnvoll, da die Übertragung unverschlüsselt ablaufen würde (außer man konfiguriert dazu extra was). Daher ist das auch Standard.
Mit einem SSH-Tunnel kann man da aber ganz einfach was dran drehen: Port-Forwarding des MySQL-Servers und schon hat man extern (über eine verschlüsselte Verbindung) Zugriff. Mach ich übrigens selber so, wenn ich auf dem Server kurz an der Datenbank etwas ändern muss.
Ferner ist dein Vorhaben, die Sicherheitsbeschränkung des MySQL-Servers mit einem PHP-Script zu umgehen, womöglich noch unverschlüsselt und ohnne Authentifizierung, ein blanker Hohn für die Leute, die zu Recht die aktuelle Default-Konfiguration des MySQL-Servers zusammengesetzt haben.
Mal ganz davon abgesehen, dass ich hoffe, dass in deiner Datenbank KEINE Klartext-Passwörter oder reine MD5-Hashes landen. Gesalzen schmecken die viel besser, wobei SHA256 oder besser SHA512 wesentlich besser schmecken, insbesondere, weil MD5 und SHA1 nahezu geplättet sind (MD5 sowieso, SHA1 kränkelt schon seit längerem).
Ach ja und bitte: Wenn Du deinen Server mit SSL absicherst, nimm bitte keine Self-Signed-Zertifikate, sondern richtige. Ein Ansatz dafür wäre CAcert: Da bekommt man SSL-Zertifikate kostenlos. 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Sa 21.03.09 18:33
Hi BenBE,
danke für deine Antwort. Jedoch habe ich anscheinend vergessen zu erläutern, dass von einem Free-Webhosting(bplaced.net) die Rede ist. Hier ist es mir nicht möglich, die Einstellungen weiter zu verändern.
Das das ändern nicht sinnvoll wäre ist mir schon klar, denn ein bisschen habe ich mich da schon eingelesen. Port-Forwarding ist mir demnach dann auch nicht möglich.
Nach meinen Recherchen bin ich sehr oft auf den Vorschlaag, doch PHP-Scripts dafür zu verwenden, gestossen. Eine Verschlüsselung hätte ich dann natürlich auch eingebaut; da ich mich aber nicht so mit dem Thema "sniffen" auskenne, wollte ich wisse, inwiefern und mit was man den Datenverkehr verschlüsseln sollte. Ich bin in meinem Post ja auch darauf eingegangen, dass ich es selber nicht optimal finde, ein PHP-Script dafür zu verwenden. Ich habe mir allerdings gedacht, dass man z.B. ein Passwort als Parameter mit übertragen müsste(welches doch dann eigentlich verschlüsslt übertragen werden würde(bei eingebauter Verschlüsselung natürlich). Jedoch weiss ich auch hier nicht, ob diese Möglichkeit so sicher wäre. Ich kenne mich damit leider nur wenig aus.
Allerdings kenne ich bis jetzt keine andere Möglichkeit, das Problem zu lösen(Merke: unter den gegebenen Bedingungen). Auch hier bin ich über jede helfende Antwort dankbar.
MFG cyberbug
|
|
Steini1980
      
Beiträge: 59
WIN 2000, SuSE 9.3 Pro
Delphi 6 Enterprise, Lazarus 0.9.16b, PHP (Dreamweaver MX)
|
Verfasst: Mo 23.03.09 14:32
Wie BenBE schon sagte ist das sehr bedenklich, gerade wenn es um Userdaten geht. Bei einem Freehosting anbieter kannst du wahrscheinlich auch keine SSL gesicherte Verbindung herstellen. Ich hoffe du bist dir dessen bewusst.
Mal abgesehen von den Sicherheitsbedenken hier ein Lösungsansatz:
Du bastelst ein PHP Script welches dir je nach Parameter die richtige ausgabe als Text, CSV oder XML liefert. Hängt denke ich von der Datenstruktur ab, weiss ja nicht was du auslesen möchtest und wohin mit den Daten. Nun sollte dir der IndyClient IdHTTP weiterhelfen das PHP-Script abzufragen und die Daten auswerten.
|
|
cyberbug 
      
Beiträge: 53
WIN XP
|
Verfasst: Mo 23.03.09 17:10
Danke für deine Antwort Steini1980!
Aber das php-script könnte dann doch auch jeder ausführen, und dann hätte doch auch jeder zugriff auf meine dateien.
Kann man dass irgendwie verhindern?
MFG cyberbug
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 23.03.09 18:57
HTTP Digest Authentification in deinem PHP-Script implementieren ... (Nicht HTTP Basic Authentification, das wäre unsicher). Wenn Du dann noch soweit gehst und nicht nur den Salt änderst, sondern auch das Passwort Zeitabhängig änderst, kannst Du das Script relativ robust gegen unbefugten Zugriff, aber nicht gegen unbefugtes Mitlesen machen.
Gegen das Mitlesen KÖNNTE es helfen, mit mcrypt und zlib die Daten zu packen und AES zu verschlüsseln, aber wie ich oben bereits schrieb ist das dann keine wirkliche Sicherheit, da du in diesem Fall irgendwo in einem Side-Channel den Session-Key der Verschlüsslung an den Client senden müsstest..
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|