Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

1

07.09.2014, 09:35

Externer Zugriff auf Datenbankserver Java

Hallo,
ich bin es wieder, das Forum hilft mir bisher echt sehr gut weiter und ich möchte vorab erstmal allen danken die hier aktiv support leisten ^^.
Nun zu der Frage, ich habe oft gelesen dass ein externer Zugriff auf Datenbankserver sehr unsicher ist.
Ich habe nun einen MySQL Server bei mir aufgesetzt mittels Ampps und dazu einen Apache Server.
Mein Java Client möchte ich anderen Nutzern geben und diese sollen in der Lage sein, mittels des Clients sich Daten aus der Datenbank anzeigen zu lassen und zu bearbeiten.
Dies habe ich lokal auch sehr gut hinbekommen, meine Frage ist aber nun, wenn ich den externen Zugriff erlaube, ob ich da einen radikalen Fehler mache, denn die Nutzer haben ja versteckt wirklich Update, Select und Delete Rechte auf dem Server.

Ist es sicher wenn ich SQL Injection komplett ausschließe, Escape Zeichen verwende ? Oder mache ich da wirklich einen radikalen Fehler ?
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

07.09.2014, 10:17

http://www.nitrosphere.com/2013/09/20/2-…er-be-2-tier-2/

Zitat

The topic of security is a tough one because arguments can be made either way for 2 vs. 3-tiers. In my experience, the 3-tier architecture has the potential for better security, but if great care isn’t taken during development it frequently ends up less secure. With a 2-tier approach, the application authenticates to and communicates directly to the database, which simplifies the attack surface area and is one less boundary to be concerned about. Depending on the details of the application server, there could be, for example, many complex REST APIs that could each have their own attack weaknesses. This one topic could be covered in a book, so I’m simply calling this one in favor of 2-tier even though direct access to the data sounds unsafe.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

3

07.09.2014, 10:24

Client Anwendungen haben niemals nie nicht einen direkten Zugriff auf einen Datenbankserver. Wenn du einen Apache davor hast schreibe z.B. einen kleinen Server bestehend aus PHP Scripten, welcher die Clientanfragen annimmt, auf Gültigkeit überprüft und dann das Statement generiert (natürlich als PreparedStatement) und dann gegen die DB feuert und das Ergebnis zurück an den Client liefert.

Alles andere ist radikal falsch, gefährlich und extrem unprofessionell :)

PS: Legend hat dir ja schon den richtigen Weg genannt -> 2-tier oder 3-tier Systeme

Noctarius

Treue Seele

Beiträge: 120

Wohnort: Düsseldorf

Beruf: Manager of Developer Relations at Hazelcast, Inc. & Consultant for Scaleable Gameserver Systems

  • Private Nachricht senden

4

07.09.2014, 10:55

Da
So ist es.
Clients schreiben niemals selbst in die DB, sondern machen das über deine Anwendungslogik.
Mit Hibernate kannst du die Datenbankanbindung realisieren (simples OR Mapping).

Das sieht dann so aus:
Dein Client hat ein DTO bekommen, dass er verändert und an den Server zurückschickt.
Der Server validiert die Daten und schaut ob der angemeldete Nutzer die Rechte dafür hat.
Das DTO wird z.B. mittels Hibernate persistiert (OR-Mapping)
Dazu reicht dann allerdings kein Apache + PHP mehr, sondern du baust einen kompletten Java-Server, der auch nur bedingt über HTTP kommuniziert. Alles schon etwas high-leveliger wenn er sich gerade noch fragt wie sein Client in die DB schreibt ;) Aber ja, generell wäre es genau der richtige Weg.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

5

07.09.2014, 11:23

Ok noch mehr Arbeit sehr gut, (heb ich mir für die Produktivumgebung auf xD)

ich möchte jedoch mal aus Entwicklungszwecken wirklich direkt zugreifen, wie schaffe ich es, dass der Mysql Server Zugriff von außen erlaubt und was gebe ich in Java für einen Pfad dafür an an ? Statt localhost meine neue Ip, die ich über einen DNS Server auflöse, da diese sich ja ändert ? sprich statt localhost:3306/db -> www.meineSeite.anbieter.de/db ? (Ohne Portangabe?) (db=Datenbank) (DNS SERVER: www.meineSeite.anbieter.de = 122.124.123.132 (MEINE IP) also steht da 122.124.123.132/db ; Ports und Co sind natürlich freigeschaltet (Port: 3306))
Habe gelesen man muss das ip-binding an den localhost aus der my.conf auskommentieren und auch eine Einstellung mit network accessing irgendwie ändern.
Jedoch ist im ampps ordner und auch im mysql ordner keine my.conf vorhanden nur eine my.ini die die Settings/Properties (ampps verweist auch darauf wenn ich auf mysql properties klicke) verwaltet und diese enthält keine solche Zeilen.

Weitere Fragen:
Wie teste ich das ganze ohne jemanden zu nerven, dass er von seinem Internet aus die Verbindung zu meinem Server versucht aufzubauen ? (Die Jar startet die eine SQL Query ausführt)
Gibt es einen Tor Client aus dem ich ein Java Programm starten kann um das auszuprobieren ? Es geht leider nicht direkt da mein Router kein Redirect unterstützt...

Kann ich den MySQL Server später auf meinem Raspberry schieben? Am besten sogar mit der ganzen php webseite oder ist der kleine Racker einfach nicht performant genug für sowas ?

Danke für den qualitativen Support.
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

6

07.09.2014, 12:46

Die Webseite die ich verwende bleibt PHP der Client ist in Java geschrieben, php macht ganz andere Sachen, da ich ein Template verwendet habe, ist mir das nicht so wichtig, aber mein Java Client soll auch an der Datenbank rumfummeln können und das ganze extern. Ja die Tutorials probiere ich gerade schon seit 3h ohne Erfolg ...
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

7

08.09.2014, 12:32

Also ich würde niemandem erlauben direkt in die Datenbank zugreifen. Eine Kapselung muss hier immer erfolgen, also 3 Schichten Modell.

Wenn sogar ein anderes Unternehmen auf die Daten einen Zugriff benötigt, dann ist zu klären welche das sind und dann müsste dafür ein Service geschaffen werden. Hier würde mir jetzt in der Java Welt Rest, Axis2 usw. einfallen.

So habe ich immer die Kontrolle darüber was mit meinen Daten passiert.

cu

Fb

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

10.09.2014, 09:38

Wenn du wirklich unbedingt eine von außen erreichbare Datenbank benutzen willst, dann richte wenigstens für jeden Benutzer einen MySQL-Benutzer ein, der nur auf "seine" Daten zugreifen darf. Also auf gar keinen Fall ein einziger MySQL-Benutzer, unter dem sich dann alle einloggen!

Werbeanzeige