6.1 KiB
6.1 KiB
Digitale Visitenkarten (Businesscard)
Dieses Projekt stellt eine einfache Verwaltungsoberfläche für digitale Visitenkarten bereit. Jede Karte wird über eine UUID adressiert, die eindeutig einem Datensatz in der Datenbank zugeordnet ist. Besucher:innen rufen die Karte über card.php?uuid= auf, während Administrator:innen über das Passwort-geschützte Dashboard alle Identitäten, Feldwerte, Dateien und UUID-Token pflegen.
Architektur
- PHP/Apache-Weboberfläche in
www/mit Frontend (card.php,download.php) und Backend (admin.phpplus_sql.php,_func.php,_user.php). - MariaDB (Docker) hält Tabellen für Identitäten, Felder, UUIDs, Berechtigungen, Dateien und Loginversuche (
db/init/001_schema.sql). - Docker Compose startet Webserver und Datenbank;
www/wird in den Apache-Container gemountet,www/files/spiegelt das Upload-Verzeichnis/var/www/files/. - Uploadverzeichnis
www/files/liegt außerhalb des Document Roots und ist als.gitkeepim Repository abgelegt, damit Hochladungen später vondownload.phpreferenziert werden.
Installation & erster Start
- Repository clonen.
www/secret.phpvom Beispiel kopieren (secret.php.example) und Datenbankzugang konfigurieren, damit_sql.phpsich verbinden kann.mkdir -p www/files(odermd www/filesunter Windows) ausführen und darauf achten, dass die.gitkeep-Datei vorhanden ist, damit der Ordner beim Containerstart genutzt wird.docker-compose up --buildim Projektverzeichnis ausführen, um Apache und MariaDB zu starten.http://localhost/admin.phpöffnen; die Standardanmeldedaten stehen inwww/_user.php(admin/password) und sollten sofort geändert werden.
Admin-Oberfläche & Workflows
- Login schützt das Dashboard; nach drei gescheiterten Versuchen wird eine IP für eine Stunde gesperrt (
admin_login_attempts). - Das Dashboard zeigt alle Identitäten sowie UUID-Token. Neue Identitäten erstellt man über
?action=identity_create. - Jedes Identity kann beliebige Felder (
identity_fields) enthalten. Der Typ kannsingle,multi,fileoderurlsein. - Dateien werden pro Identität über das neue Upload-Formular hinzugefügt und landen in
www/files/. Der Upload speichert Dateiname, generierten Zwischennamen und MIME-Type infiles. - Wenn ein Feld auf Typ
filegesetzt ist, zeigt die Auswahl nur Uploads der aktuellen Identität (perfiles.identity_id). Die ausgewählte Datei-ID wird im Feldwert gespeichert, damit später nur diese Datei angezeigt oder heruntergeladen wird. - UUID-Token (
access_tokens) verbinden eine Identität mit einer eindeutigen Zeichenfolge, können optional Auslaufdaten und Notizen erhalten und dürfen nur einmal existieren. Tokenrechte (token_permissions) bestimmen, welche Feldschlüssel Besucher:innen sehen.
Besucheransicht (Visitenkarte)
/card.php?uuid=<UUID>lädt nur die Felder, die das Token freigibt, sowie Dateien mit demselben Token oder ohne Tokenbindung.- Dateifelder erscheinen unterhalb der Felder als Downloadlinks, wenn der Token für die Datei berechtigt ist.
- Das Frontend zeigt Meta-Informationen (Ablaufdatum, Notiz) sowie eine gekürzte UUID. Bestehende Admin-Sessions leiten zurück zum Dashboard, damit Redakteur:innen schnell bearbeiten können.
Datenbankstruktur im Überblick
| Tabelle | Zweck |
|---|---|
identities |
Identitätsdatensätze mit Name und Timestamp. |
identity_fields |
Key-Value-Felder (Text, mehrzeilig, Datei, URL) pro Identität. |
access_tokens |
UUID-Token pro Identität mit Ablauf, Notiz und eindeutiger Zeichenfolge. |
token_permissions |
Erlaubte Feldschlüssel pro Token. |
files |
Hochgeladene Dateien mit identity_id, filename, stored_name, mime_type und optional token_id. |
admin_login_attempts |
Brute-Force-Schutz mit Zählern und Sperrzeit pro IP. |
Sicherheitshinweise
- UUIDs sind einmalige Zugriffstoken und sollten nicht doppelt vergeben oder offen weitergegeben werden, wenn geschützte Daten hinterlegt sind.
- Admin-Zugang: Bitte
www/_user.phpdurch eigene Credentials ersetzen oder ein robusteres Auth-Verfahren implementieren. - Loginversuche werden nach drei Fehlversuchen eine Stunde gesperrt (
registerFailedLogin,isIpLocked,clearLoginAttempts). - Datei-Uploads liegen im Verzeichnis
www/files/(Container:/var/www/files/) und dürfen ausschließlich überdownload.phpmit gültigem Token ausgeliefert werden. Der Ordner sollte nicht direkt vom Webserver referenziert werden.
Weiterentwicklung & Pflege
- Stil & Branding: Die Inline-CSS im
card.php-Head kann durch ein eigenes Template ersetzt oder ausgelagert werden. - Dateien & Automatisierung: UUIDs und zugehörige Dateien lassen sich per API oder QR-Code verteilen. Die Download-Logik kann um Freigabezeitfenster erweitert werden.
- Tests & Validierung: Neue Felder brauchen eventuell Frontend-Validierung; Dateiuploads sollten auf MIME-Type, Größe und erlaubte Endungen geprüft werden.
- Deployment: Docker Compose genügt lokal. In Produktion empfiehlt sich ein Reverse Proxy, HTTPS und regelmäßige Backups des MariaDB-Volumes (
db_data). Auchwww/files/sollte gesichert werden, da dort alle Uploads gespeichert werden.
Hinweis: UUIDs repräsentieren digitale Visitenkarten und sind einmalig. Jeder Besuch über eine UUID dokumentiert genau eine Karte, deren Sichtbarkeit über Tokenrechte und Datei-Zuordnungen kontrolliert wird.