From a621557820716af87861c286aedeb294623e31ae Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sun, 20 Sep 2026 13:48:28 +0000 Subject: [PATCH] Add project README and changelog --- CHANGELOG.md | 46 +++++++++++++++++++++++++++++++++++++++ README.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 README.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f1d5f77 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,46 @@ +# Changelog + +Alle Einträge verwenden ISO-8601-Timestamps in UTC. Mehrere Änderungen desselben Tages werden in einem gemeinsamen Eintrag zusammengefasst. + +## 2026-09-20T13:48:02+00:00 – Initial Release + +### Anwendung + +- PnPaaS-Webanwendung als PHP-/MariaDB-Anwendung bereitgestellt. +- Benutzerregistrierung mit E-Mail-Aktivierung implementiert. +- Anmeldung, Session-Verwaltung und Logout implementiert. +- Passwort-Reset mit gehashten, zeitlich begrenzten Einmal-Tokens implementiert. +- Passwort- und Benutzerdaten werden mit sicheren Hash-Verfahren verarbeitet. +- Benutzer- und Admin-Dashboard für Instanzanforderungen bereitgestellt. +- Tarif- und Instanzstatusverwaltung integriert. +- Portainer-Anbindung über serverseitigen API-Key integriert. +- Audit-Log und Datenbankbeziehungen für Benutzer und Instanzen vorgesehen. +- Rechtstext-Zustimmungen mit Dokument-URLs und Versionsangaben gespeichert. + +### Sicherheit + +- CSRF-Schutz für zustandsändernde Formulare implementiert. +- Prepared PDO Statements und native PDO-Prepares aktiviert. +- Sichere Session-Cookies, HttpOnly, SameSite und Secure-Cookie-Unterstützung aktiviert. +- Sicherheitsheader einschließlich CSP, HSTS bei HTTPS, Frame-Schutz und MIME-Schutz ergänzt. +- Technische Fehlerdetails werden nicht an Benutzer ausgegeben. +- `.htaccess` schützt `includes/`, `database/`, Laufzeitkonfigurationen und sensible Dateien. +- Portainer-TLS-Zertifikatsprüfung bleibt aktiviert. +- Produktive Zugangsdaten, `.env`-Dateien, API-Keys und Datenbankinhalte sind nicht Bestandteil des Repositories. + +### Datenbank + +- Idempotentes Basisschema für Benutzer, Aktivierungstokens, Passwort-Reset-Tokens, Zustimmungen, Instanzen, Portainer-Tokens und Audit-Logs hinzugefügt. +- Migration für Kontoaktivierung hinzugefügt. +- Migration für zusätzliche Registrierungsdaten hinzugefügt. +- Fremdschlüssel, eindeutige Schlüssel und Statuswerte definiert. + +### Installation und Betrieb + +- Browserinstaller als `installer.php` bereitgestellt. +- Installation ohne Shellzugriff ermöglicht, sofern Datenbank und Datenbankbenutzer bereits über das Hosting-Panel angelegt wurden. +- Installer funktioniert direkt im Webroot sowie in einem Unterverzeichnis. +- Runtime-Konfiguration wird als geschützte PHP-Datei geschrieben. +- Installer löscht sich nach erfolgreicher Installation selbst und verwendet zusätzlich einen Completion-Marker. +- Root-Layout des Git-Repositories hergestellt; die Anwendung liegt direkt im Repository-Root. +- Beispielkonfiguration und Sicherheitsdokumentation bereitgestellt. diff --git a/README.md b/README.md new file mode 100644 index 0000000..315d240 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# PnPaaS + +PnPaaS ist eine PHP-/MariaDB-Webanwendung zur Verwaltung von Benutzern und containerbasierten Instanzen über Portainer. + +## Funktionen + +- Benutzerregistrierung mit E-Mail-Aktivierung +- Anmeldung und sichere Passwortverwaltung +- Passwort-Reset mit zeitlich begrenzten Einmal-Tokens +- CSRF-Schutz und sichere Session-Cookies +- geschütztes Benutzer- und Admin-Dashboard +- Verwaltung von Instanzanforderungen und Tarifen +- Portainer-Anbindung über serverseitigen API-Key +- Datenbank-Audit-Log +- Verwaltung von Rechtstext-Zustimmungen und Versionen +- Browserinstaller unter `/installer.php` +- Root- und Unterverzeichnisbetrieb ohne fest codierten Installationspfad +- Schutzregeln für Datenbank-, Include- und Konfigurationsdateien + +## Voraussetzungen + +- PHP 8.1 oder neuer +- MariaDB/MySQL +- PHP-Erweiterungen `pdo_mysql`, `curl` und `mbstring` +- HTTPS im Produktivbetrieb +- eine bereits angelegte Datenbank und ein eingeschränkter Datenbankbenutzer + +## Browserinstallation ohne Shellzugriff + +1. Alle Dateien dieses Repositorys in das gewünschte Webverzeichnis hochladen. +2. `https://example.org/installer.php` öffnen. +3. Bei einer Installation in einem Unterverzeichnis die entsprechende URL verwenden, zum Beispiel `https://example.org/pnpaas/installer.php`. +4. Datenbank-, Administrator-, Portainer- und Rechtstextdaten eingeben. +5. Der Installer importiert Schema und Migrationen und erstellt die geschützte Laufzeitkonfiguration. +6. Nach erfolgreicher Einrichtung löscht sich `installer.php` selbst oder wird durch `.install-complete` gesperrt. + +Die MariaDB-Datenbank und der Anwendungsbenutzer müssen vor dem Browser-Aufruf über das Hosting-Panel angelegt werden. Root-Datenbankzugangsdaten werden nicht benötigt. + +## Konfiguration + +Die Browserinstallation schreibt die Konfiguration nach `includes/runtime-config.php`. Diese Datei enthält sensible Zugangsdaten und darf nicht öffentlich ausgeliefert werden. `.htaccess` schützt sie zusätzlich; die effektive Webserver-Konfiguration muss nach der Bereitstellung geprüft werden. + +`config.example.php` dokumentiert die unterstützten Konfigurationswerte für manuelle Serverinstallationen. + +## Struktur + +- `installer.php` – einmaliger Browserinstaller +- `index.php` – Anmeldung +- `register.php` – Registrierung +- `dashboard.php` – Benutzer- und Adminbereich +- `includes/bootstrap.php` – Konfiguration, Sessions, Datenbank und Portainer-Client +- `database/schema.sql` – initiales Datenbankschema +- `database/migrations/` – idempotente Migrationen +- `assets/style.css` – Anwendungsstyles +- `.htaccess` – Defense-in-Depth-Schutz für Apache + +## Sicherheit + +Produktivbetrieb muss über HTTPS erfolgen. API-Keys, Datenbankpasswörter, Laufzeitkonfigurationen und private Schlüssel gehören nicht in Git. Vor Updates ist ein Datenbankbackup zu erstellen. + +Weitere Änderungsinformationen stehen in `CHANGELOG.md`.