MySQL (PHPMyAdmin) abfragen in Xcode & Java?

1 Antwort

Zwischen deiner iOS-App und der Datenbank sollte eine Anwendung liegen, die stellvertretend eine direkte Verbindung zur Datenbank aufbaut und die erforderlichen Daten an die App schickt. Auf diese Weise braucht die App die Verbindungsdaten der Datenbank nicht kennen (was auch ein Sicherheitsrisiko wäre) und zusätzlich kann der Datenzugriff besser gesteuert werden.

Bau dir beispielsweise eine Webanwendung, denn die ist leicht (via Internet) erreichbar. Vielleicht könnte aber auch dein Minecraft-Server die Datenschnittstelle stellen (z.B. via MineRest) oder vielleicht kannst du parallel auf dem Server eine separate Java-Webanwendung laufen lassen.

Überlege dir zuerst, welche Endpunkte du benötigst, über die Daten hin- und hergeschoben werden. Wenn du beispielsweise Nutzerdaten in der Datenbank sichern würdest, die von der App erfragt werden sollen, könnte es einen Endpunkt https://deinewebsite.de/users geben, welcher alle Nutzer zurückgibt. Diese Adresse muss öffentlich erreichbar sein.

Es macht Sinn, wenn du dich in diesem Zuge mit RESTful APIs auseinandersetzt. Tutorials für eine praktische Umsetzung lassen sich leicht finden (Beispiel mit PHP, Beispiel mit Java/JakartaEE 9).

Mit welcher Programmiersprache die Webanwendung entwickelt werden kann, hängt von dem Webserver ab, den du für die Webanwendung nutzt. Der Apache HTTP Server eignet sich bspw. für PHP-Anwendungen, für Node.js-basierte Applikationen mit expressJS o.ä. kannst du JavaScript einsetzen, Java-Webanwendungen kann man auf Basis von Jetty oder Tomcat laufen lassen, usw.. Hilfsbibliotheken zur Kommunikation mit MySQL lassen sich im Anschluss leicht finden. In der Standardbibliothek von PHP gibt es bspw. das mysqli-Modul, in der MySQL-Dokumentation werden verschiedene Connectors/Treiber als Mindestbasis für C#, Java, Node.js und Python aufgeführt.

Für den Aufruf deiner Endpunkte (HTTP(S)-Requests) in der iOS-App kannst du die URLRequest-Klasse nutzen. Solltest du von einem Minecraft Serverplugin aus mit Java Anfragen an eine externe API/Webanwendung stellen müssen, kannst du die HTTP Client API nutzen.

Ein paar zusätzliche Sicherheitsmaßnahmen neben der von mir beschriebenen Architektur wären:

  • IP-Whitelists seitens der Datenbank (nur die API darf eine Verbindung mit der Datenbank aufnehmen)
  • Die Verbindungsdaten zur Datenbank sollten in einer Konfigurationsdatei außerhalb des Webroots gespeichert werden - nicht im Quellcode
  • Authentication und Authorization (Kommunikation über TLS, evt. API-Keys/HMAC/OAuth, JWT) - welche Maßnahmen am meisten Sinn ergeben, sollte unter anderem daran bewertet werden, wie sensibel die verwalteten Daten überhaupt sind
  • Bruteforce-Detection (Caching, Clients identifizieren und bei zu häufigen Anfragen auf eine temporäre oder permanente Blacklist setzen)
  • Validation aller Eingabedaten
  • Kommunikation mit der Datenbank nur via Prepared Statements
  • Alle Ebenen verwenden eine stabile Zeichenkodierung wie UTF-8 (MySQL: utf8mb4) für die Datenverarbeitung (Auswertung/Transport)

Auf OWASP findest du noch mehr und detailliertere Tipps. Generell würde ich dir empfehlen, aufbauend zu meinen Stichpunkten noch weiter zu recherchieren.

Marie2738Twice 
Fragesteller
 06.11.2023, 22:33

Bekomme ich hin, danke!

0