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