README.md aktualisiert
This commit is contained in:
parent
47417ee692
commit
fea89942da
177
README.md
177
README.md
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user