From 1fb2a9658309aa8a2ec93b1e224830f47dcb3530 Mon Sep 17 00:00:00 2001 From: fds2610 Date: Wed, 25 Mar 2026 16:00:29 +0100 Subject: [PATCH] Changes.md erstellt, README.md und install.sh aktualisiert --- Changes.md | 36 ++++++++++++------------------------ README.md | 23 ++++++++++++++--------- install.sh | 4 ++++ 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/Changes.md b/Changes.md index b44f863..7c408af 100644 --- a/Changes.md +++ b/Changes.md @@ -1,28 +1,16 @@ -# Changelog +# Änderungshistorie ---- +## Unveröffentlicht -## 2026-03-25 – Sicherheit, UX-Verbesserungen & Bugfixes +### Neu +- **Session-Authentifizierung** – HTTP Basic Auth durch cookie-basierte Session-Authentifizierung ersetzt; Sessions laufen nach 24 Stunden absolut ab (kein Sliding Expiry) +- **Benutzerverwaltung** (`/useradmin`) – Benutzer anlegen, bearbeiten (Benutzername und Passwort), deaktivieren und löschen; Passwörter werden mit bcrypt gehasht gespeichert +- **Ersteinrichtungsflow** – beim ersten Start ohne Benutzer leitet die Anwendung auf `/login` weiter und ermöglicht dort das Anlegen des ersten Administrator-Accounts +- **Abmelden-Button** in der Seitenleiste -### Sicherheit -- **Timing-sicherer Login**: Passwort- und Benutzernamevergleich auf `hash_equals()` umgestellt (verhindert Timing-Angriffe) -- **SVG-Upload gesperrt**: Logo-Upload akzeptiert nur noch PNG und JPEG – SVG wurde entfernt (XSS-Risiko) -- **CSV-Injection-Schutz**: Felder im Buchungsjournal-CSV-Export werden gegen Formula-Injection (`=`, `+`, `-`, `@`) abgesichert +### Geändert +- `AUTH_USER` und `AUTH_PASS` entfernt – Zugangsdaten werden nun ausschließlich in der Datenbank verwaltet +- Neue Datenbanktabelle `users` (Migration `005_users.sql`) erforderlich -### Features -- **Inline-Editing**: Belegdatum und Rechnungsnr. können direkt in der Beleg-Detailansicht per Klick bearbeitet werden (kein Seitenreload) -- **Belegart-Filter**: Neue Filteroption in der Belegliste zum Filtern nach Belegart (Eingangsrechnung, Ausgangsrechnung, Quittung etc.) -- **Favicon & App-Icon**: Favicon für Browser-Tabs, Apple Touch Icon und Web-App-Manifest eingebunden - -### Robustheit -- **Datenbankfehler-Handling**: PDO-Exceptions in Invoice-, Booking- und BelegController werden separat abgefangen und geloggt statt als generische Fehler zu erscheinen - ---- - -## 2026-03-24 – Initiales Release - -### Features -- **Basis-System**: MVC-Framework, Routing, Authentifizierung, Datenbank-Migrations-System -- **Ausgangsrechnungen**: Erstellen, Verwalten und PDF-Export von Ausgangsrechnungen -- **EÜR-Vorbereitung**: Einnahmen-Überschuss-Rechnung als PDF-Export -- **UStVA-Vorbereitung**: Umsatzsteuer-Voranmeldung inkl. XML-Export für elster.de +### Behoben +- Fehler in `BelegController` behoben diff --git a/README.md b/README.md index e39fbb8..d39c6cf 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Self-hosted Buchhaltungs- und Steueranwendung für deutsche Freiberufler und Kle - **UStVA** – Kennzahlen-Berechnung aus Buchungen, ELSTER XML-Export - **EÜR** – Jahresauswertung mit PDF-Export - **Einstellungen** – Firmendaten, Logo, ELSTER-Steuernummer +- **Benutzerverwaltung** – Benutzer anlegen, bearbeiten, deaktivieren und löschen; session-basierte Authentifizierung mit 24 h Timeout ## Tech Stack @@ -70,18 +71,20 @@ git clone steuerkram cd steuerkram ``` -#### 2. Zugangsdaten anpassen +#### 2. Konfiguration anpassen -Öffne `docker-compose.yml` und ändere die folgenden Umgebungsvariablen im `web`-Service: +Kopiere `.env.example` nach `.env` und passe die Werte an: -```yaml -environment: - AUTH_USER: admin # Login-Benutzername - AUTH_PASS: changeme # Login-Passwort – UNBEDINGT ändern! - APP_SECRET: change-this-in-production # Zufälligen langen String eintragen +```bash +cp .env.example .env ``` -Außerdem die Datenbankpasswörter in beiden Services (`web` und `db`) aufeinander abstimmen, falls gewünscht. +```dotenv +DB_PASS=sicheres-passwort # Datenbankpasswort – in docker-compose.yml spiegeln +APP_SECRET=zufaelliger-string # Zufälligen langen String eintragen (für Sessions) +``` + +Außerdem in `docker-compose.yml` das `MARIADB_PASSWORD` im `db`-Service auf denselben Wert wie `DB_PASS` setzen. #### 3. Container starten @@ -100,7 +103,9 @@ Beim ersten Start werden automatisch: http://localhost:8080 ``` -Login mit den in Schritt 2 gesetzten Zugangsdaten. +Beim ersten Aufruf erscheint die **Ersteinrichtung**: dort den ersten Benutzer-Account anlegen. Danach ist die Anwendung passwortgeschützt. + +Weitere Benutzer können nach dem Login unter **Benutzer** in der Seitenleiste verwaltet werden. #### 5. Firmendaten hinterlegen diff --git a/install.sh b/install.sh index 1423fc5..fc62904 100755 --- a/install.sh +++ b/install.sh @@ -289,3 +289,7 @@ echo "" echo " Danach die Anwendung starten:" echo -e " ${BOLD}cd ${INSTALL_DIR} && docker compose up -d${NC}" echo "" +echo -e "${YELLOW}${BOLD}Erster Login:${NC}" +echo " Beim ersten Aufruf der Anwendung im Browser wird automatisch" +echo " die Ersteinrichtung angezeigt – dort den ersten Benutzer anlegen." +echo ""