README.md aktualisiert

This commit is contained in:
Fabian Schieder 2026-04-02 00:26:08 +00:00
parent 47417ee692
commit fea89942da

177
README.md
View File

@ -2,8 +2,8 @@
## Kurzüberblick ## Kurzüberblick
Geizkragen ist eine webbasierte Anwendung zur Produktsuche, zum Preisvergleich und zur Verwaltung von Benutzerinteraktionen (z. B. Wunschliste, Konto). Geizkragen ist eine webbasierte Anwendung zur Produktsuche und zum Preisvergleich. Nutzer können Produkte durchsuchen, vergleichen und in einer persönlichen Wunschliste verwalten.
Die Anwendung basiert auf einer klassischen serverseitigen Architektur mit PHP und relationaler Datenbank. Das Projekt dient als technische Demonstration einer klassischen PHP-basierten Webanwendung mit Datenbankanbindung.
--- ---
@ -14,11 +14,11 @@ Die Anwendung basiert auf einer klassischen serverseitigen Architektur mit PHP u
* Wunschliste (benutzergebunden) * Wunschliste (benutzergebunden)
* Benutzerregistrierung und Login * Benutzerregistrierung und Login
* Benutzerkonto-Verwaltung * Benutzerkonto-Verwaltung
* Adminbereich zur Benutzerverwaltung * Administrationsbereich zur Benutzerverwaltung
* Hinzufügen neuer Produkte * Hinzufügen neuer Produkte
* Produktdetailseiten * Produktdetailseiten
* Statistikfunktionen (JSON-basiert) * Einfache statistische Auswertungen
* Einfaches Empfehlungssystem * Grundlegendes Empfehlungssystem
--- ---
@ -27,28 +27,28 @@ Die Anwendung basiert auf einer klassischen serverseitigen Architektur mit PHP u
```bash ```bash
geizkragen/ geizkragen/
├── index.php # Startseite ├── index.php
├── productpage.php # Produktdetails ├── productpage.php
├── compare.php # Produktvergleich ├── compare.php
├── wunschliste.php # Wunschliste ├── wunschliste.php
├── login.php # Login ├── login.php
├── register.php # Registrierung ├── register.php
├── account.php # Benutzerkonto ├── account.php
├── admin_users.php # Admin-Panel ├── admin_users.php
├── api/ ├── api/
│ └── search_products.php # Produktsuche API │ └── search_products.php
├── assets/ ├── assets/
│ ├── css/ # Stylesheets │ ├── css/
│ ├── images/ # Bilder / DB-Design │ ├── images/
│ └── icons/ # Icons │ └── icons/
├── header.php # Header-Komponente ├── header.php
├── footer.php # Footer-Komponente ├── footer.php
├── style.css # Globales Styling ├── style.css
├── stats.json # Statistiken ├── stats.json
└── .htaccess # Serverkonfiguration └── .htaccess
``` ```
--- ---
@ -70,8 +70,8 @@ git clone <repository-url>
cd geizkragen cd geizkragen
``` ```
Alternativ: Oder manuell:
Projekt entpacken nach: Projekt in das Webserver-Verzeichnis kopieren, z. B.:
``` ```
C:\xampp\htdocs\geizkragen C:\xampp\htdocs\geizkragen
@ -82,15 +82,14 @@ C:\xampp\htdocs\geizkragen
### Datenbankeinrichtung ### Datenbankeinrichtung
1. Neue Datenbank erstellen 1. Neue Datenbank erstellen
2. Tabellen entsprechend dem vorhandenen Schema anlegen 2. Tabellen entsprechend dem Schema anlegen
3. Zugangsdaten in den PHP-Dateien konfigurieren 3. Zugangsdaten in den PHP-Dateien konfigurieren
--- ---
### Start ### Start
* Webserver starten (z. B. Apache über XAMPP) Webserver starten und im Browser öffnen:
* Anwendung aufrufen:
``` ```
http://localhost/geizkragen http://localhost/geizkragen
@ -108,7 +107,7 @@ GET /api/search_products.php?q=Suchbegriff
Antwort: Antwort:
* JSON-Format mit passenden Produkten * JSON mit passenden Produkten
--- ---
@ -116,56 +115,59 @@ Antwort:
### Backend ### Backend
* PHP (serverseitige Verarbeitung) * PHP
* Teilweise REST-ähnliche API-Struktur * Serverseitige Verarbeitung
* Teilweise API-Struktur
### Frontend ### Frontend
* HTML5 * HTML5
* CSS * CSS
* Serverseitiges Rendering (kein SPA) * Klassisches serverseitiges Rendering
### Datenhaltung ### Datenhaltung
* Relationale Datenbank (MySQL/MariaDB) * MySQL / MariaDB
* Ergänzend JSON-Dateien (z. B. Statistiken) * Ergänzend JSON (Statistiken)
--- ---
## Zentrale Module ## Sicherheit und Hinweis zur öffentlichen Nutzung
| Modul | Funktion | Dieses Repository ist öffentlich zugänglich.
| --------------------- | -------------------------- | Der aktuelle Stand ist als Lern- bzw. Entwicklungsprojekt zu verstehen und **nicht für den produktiven Einsatz im Internet vorgesehen**.
| compare.php | Vergleich von Produkten |
| productAdder.php | Hinzufügen neuer Produkte | Bekannte Einschränkungen:
| wunschliste.php | Verwaltung der Wunschliste |
| admin_users.php | Benutzerverwaltung | * Sicherheitsmechanismen sind nicht vollständig implementiert
| ad_recommendation.php | Empfehlungssystem | * Authentifizierung und Session-Handling sollten überprüft werden
* Eingabevalidierung und Schutz gegen SQL-Injection sind teilweise unzureichend
* Keine Garantie für Datenschutz oder Datensicherheit
**Empfehlung:**
Vor einem produktiven Einsatz müssen grundlegende Sicherheitsmaßnahmen implementiert werden.
--- ---
## Sicherheit (Bewertung und Empfehlungen) ## Empfohlene Sicherheitsmaßnahmen
Aktueller Stand deutet auf grundlegende Implementierung hin, jedoch mit Verbesserungspotenzial.
Empfohlene Maßnahmen:
* Verwendung von Prepared Statements (PDO/MySQLi) * Verwendung von Prepared Statements (PDO/MySQLi)
* Passwort-Hashing mit `password_hash()` und `password_verify()` * Passwort-Hashing mit `password_hash()`
* Validierung und Sanitizing sämtlicher Eingaben * CSRF-Schutz für Formulare
* CSRF-Schutz bei Formularen * Strikte Validierung und Sanitizing aller Eingaben
* Session-Härtung (z. B. Regeneration von Session-IDs) * Sichere Session-Verwaltung (Session-Regeneration)
* Fehlerausgaben im Produktivbetrieb deaktivieren
--- ---
## Erweiterungsmöglichkeiten ## Erweiterungsmöglichkeiten
* Einführung eines MVC-Patterns zur besseren Trennung von Logik und Darstellung * Einführung eines MVC-Patterns
* Ausbau der API zu einer vollständigen REST-Schnittstelle * Trennung von Backend und Frontend (API-first)
* Integration eines modernen Frontends (z. B. Vue oder React) * Nutzung eines modernen Frontend-Frameworks
* Verbesserung der UI/UX (Responsive Design) * Verbesserung der Benutzeroberfläche (Responsive Design)
* Automatisierte Tests (Unit/Integration) * Erweiterung des Empfehlungssystems
* Erweiterung des Empfehlungssystems (z. B. Scoring oder ML-basierte Ansätze) * Automatisierte Tests
--- ---
@ -173,36 +175,40 @@ Empfohlene Maßnahmen:
Empfohlen: Empfohlen:
* IDE: PhpStorm oder Visual Studio Code * PhpStorm oder Visual Studio Code
* Datenbank-Tools: MySQL Workbench * MySQL Workbench
* Lokaler Server: XAMPP oder vergleichbar * XAMPP oder vergleichbare lokale Serverumgebung
--- ---
## Lizenz ## Lizenz
Derzeit ist keine Lizenz definiert. Derzeit ist keine Lizenz definiert.
Empfehlung: Verwendung einer MIT-Lizenz oder vergleichbarer Open-Source-Lizenz. Ohne Lizenz ist die Nutzung, Veränderung und Weitergabe rechtlich eingeschränkt.
Empfehlung:
Eine Open-Source-Lizenz wie MIT oder Apache 2.0 hinzufügen.
--- ---
## Autor ## Autor
Fabian Schieder Fabian Schieder
Paul Eisenbock
--- ---
## Fachliche Einschätzung ## Fachliche Einschätzung
Das Projekt stellt eine solide Grundlage für eine klassische datenbankgestützte Webanwendung dar. Das Projekt ist ein solides Beispiel für eine klassische PHP-Webanwendung mit Datenbankanbindung.
Architektonisch handelt es sich um eine typische serverseitig gerenderte PHP-Anwendung ohne klare Trennung der Schichten. Für Lernzwecke ist die Struktur sinnvoll, jedoch fehlen klare architektonische Trennungen und sicherheitsrelevante Mechanismen.
Aus technischer Sicht sind folgende Punkte besonders relevant für die Weiterentwicklung: Für eine Weiterentwicklung sind insbesondere folgende Punkte entscheidend:
* Entkopplung von Präsentation und Logik (z. B. MVC) * Strukturierung (MVC oder ähnliche Muster)
* Verbesserung der Sicherheit (insbesondere Datenbankzugriffe und Authentifizierung) * Absicherung der Datenbankzugriffe
* Modularisierung und Wartbarkeit des Codes * Saubere Trennung von Logik und Darstellung
* Optional: Übergang zu API-first-Architektur * Skalierbarkeit durch API-basierte Architektur
--- ---
@ -210,36 +216,35 @@ Aus technischer Sicht sind folgende Punkte besonders relevant für die Weiterent
### Häufige Probleme ### Häufige Probleme
* Unsichere SQL-Queries (SQL-Injection) * SQL-Injection durch direkte Queries
* Fehlendes oder falsches Passwort-Hashing * Fehlendes Passwort-Hashing
* Vermischung von HTML und PHP (erschwerte Wartung) * Vermischung von PHP und HTML
* Fehlende Eingabevalidierung
* Unsichere Session-Verwaltung * Unsichere Session-Verwaltung
* Fehlende Eingabevalidierung
### Best Practices ### Best Practices
* Prepared Statements konsequent einsetzen * Prepared Statements konsequent verwenden
* Trennung von Logik und Darstellung * Zentrale Konfigurationsdateien nutzen
* Verwendung von zentralen Konfigurationsdateien * Logging und Fehlerhandling implementieren
* Strukturierte Fehlerbehandlung * Code modularisieren
* Logging implementieren * Sicherheitskonzepte früh integrieren
--- ---
## Typischer Ablauf (Use Case) ## Typischer Ablauf
1. Benutzer sucht ein Produkt (API-Aufruf) 1. Benutzer sucht ein Produkt
2. Anzeige der Ergebnisse auf der Startseite 2. Ergebnisse werden angezeigt
3. Auswahl eines Produkts (Detailseite) 3. Produktdetailseite wird geöffnet
4. Optionaler Vergleich mit anderen Produkten 4. Optional: Vergleich oder Speicherung in Wunschliste
5. Speicherung in der Wunschliste
--- ---
## Zusammenfassung ## Zusammenfassung
* PHP-basierte Webanwendung für Produktsuche und Preisvergleich * PHP-basierte Preisvergleichsplattform
* Klassische serverseitige Architektur * Klassische serverseitige Architektur
* Enthält Benutzerverwaltung, Vergleich und API * Öffentliche Repository mit Lerncharakter
* Erweiterbar in Richtung moderne Webarchitektur * Sicherheit derzeit nicht ausreichend für Produktion
* Sicherheit und Struktur sollten verbessert werden * Gute Basis für Erweiterung und Refactoring