Architektur sinnvoll

AffeMitWaffe

New Member
Hallo zusammen,

ich bin dabei WebApps zu programmieren, die mit einer Datenbank interagieren.
Aktuell läuft es bei mir so:
Ich habe einen Apache Server auf dem ein MySQL Server und PHP7 läuft.
Meine WebApp (basierend auf Javascript) läuft dabei auf einem Client.
Die Anfragen gehen auf bestimmte PHP Scripte auf dem Server.
Die PHP Scripte sind aus dem Internet aufrufbar.
Die PHP Scripte sprechen dann direkt die MySQL Datenbank an und liefern die Informationen zurück an die WebApp. (Oder schreiben auf die Datenbank).

Macht das ganze Architekturtechnisch so überhaupt sinn?
 
Was ist der Hintergrund der Frage? Welche Architektur meinst Du? Software oder Hardware?

Ansonsten - solange es funktioniert ist es wohl sinnvoll.
 
Da man über die PHP Seite sozusagen direkten Zugriff auf die Datenbank hat.
Sollte man eventuell noch eine "Schicht" zwischen PHP und Datenbank einbauen?
Eventuell könnten unbefugte ja mit dem richtigen Aufruf der PHP Scripte an Daten kommen, oder?
 
Ach so, Du hast keinerlei Auth.-Mechanismen zwischen App und Web-Service? Na, das würde ich aber mal schleunigst nachholen.

... um zu sagen, was da angesagt, richtig, ausreichend, notwendig ist sollte man ein wenig mehr Infos über die zu übertragenden Daten haben...

... und eigentlich macht man sich über sowas vorher Gedanken.
 
Also das läuft noch nicht im Internet :D
Läuft aktuell lokal auf meinem Rechner bis ich alles geregelt habe.

Bisher läuft es so:
- User bekommt auf dem Client eine Anmelde Seite und ruft ein login.php script auf.
- Wenn die authentifizierung erfolgreich war wird eine session gestartet.
- Auf allen folgenden php scripts wird geguckt ob eine session vorhanden ist.
- Wenn eine session vorhanden ist erfolgt alles weiter. Wenn nicht bekommt der user eine error page.

Sieht dann so aus (nach anmelde script):
PHP:
<?php 
session_start();
header("Content-Type: text/html; charset=utf-8");
header('Access-Control-Allow-Credentials: true'); 
header('Access-Control-Allow-Origin: http://localhost:63342');  	
if ( $_SESSION['eingeloggt'] == true )
{
//hier erfolgt der code..
}
else
{
    echo "Nicht eingeloggt";
    exit;
}	
?>
 
Last edited by a moderator:
Da man über die PHP Seite sozusagen direkten Zugriff auf die Datenbank hat.
Sollte man eventuell noch eine "Schicht" zwischen PHP und Datenbank einbauen?

Diese Sicherheitsschicht sind deine PHP-Scripte. Die mußt du natürlich so gestalten, dass sie nur die Daten aus der Datenbank ausgeben, die sie auch ausgeben dürfen.
Es gibt eine einfache Regel: Trau keiner Eingabe von außen. Alles, was deine PHP-Scripte an externen Daten geliefert bekommen, muß von diesen geprüft und ggfl. bereinigt werden. Diese Logik darfst du auch nicht an dein Javascript auslagern. Wie diese Prüfungen aussehen, hängt von den Scripten und den gelieferten Daten ab. PHP bietet Funktionen, um verbotene Zeichen in SQL-Abfragen entsprechend zu maskieren.
 
Was du baust ist eine API. Hierfür gibt es bereits gute Frameworks welche Authentisierung, Sessions, Funktionsaufrufe und zT Validierung für dich übernehmen. Was man nicht selber programmiert kann man nicht falsch machen und man soll(te) davon ausgehen dass fertige Frameworks und Komponenten immer besser sind als Eigenentwicklungen.

Für PHP in Verbindung mit "kleinen" API's mag ich folgenden REST API-Server eben weil er so schlank und nicht-intrusiv ist:
https://github.com/jacwright/RestServer
Er übernimmt selber nicht direkt die Validierung, gibt aber ein gutes sauberes Grundgerüst für Anwendungen.
[OT]
Grössere Projekte baue ich persönlich bevorzugt sowohl server- als auch clientseitig in Javascript mit Model-Controller Struktur (NodeJS + Loopback + Angular + Bootstrap), sowas läuft dann aber nicht auf einem Webhosting Konto und ist etwas einführungsintensiver.
 
Was du baust ist eine API. Hierfür gibt es bereits gute Frameworks welche Authentisierung, Sessions, Funktionsaufrufe und zT Validierung für dich übernehmen. Was man nicht selber programmiert kann man nicht falsch machen und man soll(te) davon ausgehen dass fertige Frameworks und Komponenten immer besser sind als Eigenentwicklungen.

Für PHP in Verbindung mit "kleinen" API's mag ich folgenden REST API-Server eben weil er so schlank und nicht-intrusiv ist:
https://github.com/jacwright/RestServer
Er übernimmt selber nicht direkt die Validierung, gibt aber ein gutes sauberes Grundgerüst für Anwendungen.

Ja stimmt, kann man so sagen.
Bis jetzt machen die PHP Scripte nichts anderes als Tabellen aus der Datenbank zurückzuliefern (oder halt gefilter, je nach dem) oder neue Einträge zu schreiben.

Ein Framework wäre da natürlich optimal.
 
- Wenn die authentifizierung erfolgreich war wird eine session gestartet.
- Auf allen folgenden php scripts wird geguckt ob eine session vorhanden ist.
Nach dem Einloggen musst du die Session ID ändern (session_regenerate_id) und die alte Session löschen. Das verhindert Session Fixation [1].
Beim DB-Zugriff ist darauf zu achten, keine SQL-Injections einzubauen. Eigenbauten sind da selbst für erfahrenere Entwickler nicht ganz ohne Fallsticke. Am besten nimmst du eine Library, die die Statements für dich erzeugt oder gleich ein ORM.
Das letzte mal, dass ich was mit PHP und SQL zu tun hatte, fand ich notORM[2] ganz schick.

[1] https://de.wikipedia.org/wiki/Session_Fixation
[2] http://www.notorm.com
 
Nach dem Einloggen musst du die Session ID ändern (session_regenerate_id) und die alte Session löschen. Das verhindert Session Fixation [1].
Beim DB-Zugriff ist darauf zu achten, keine SQL-Injections einzubauen. Eigenbauten sind da selbst für erfahrenere Entwickler nicht ganz ohne Fallsticke. Am besten nimmst du eine Library, die die Statements für dich erzeugt oder gleich ein ORM.
Das letzte mal, dass ich was mit PHP und SQL zu tun hatte, fand ich notORM[2] ganz schick.

[1] https://de.wikipedia.org/wiki/Session_Fixation
[2] http://www.notorm.com

Cool, danke für den Tipp :)

Suche jetzt nach einem passenden Framework für meine Dienste.
Bin da auf das Slim Framework gestoßen. Muss ich mal testen.
 
Back
Top