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/html/_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. Unter dem Formular zeigt das Admin-UI eine Liste der bereits hochgeladenen Dateien inkl. einer Löschoption. - 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/html/_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.
Description
Languages
PHP
99.5%
Dockerfile
0.5%