Name: Linkstack
Idee: Eine Social Media Link-Sharing Plattform mit Fokus auf Gaming-Integration (z. B. Discord RPC, Spotify).
Dokumentation: Dokumentation
- Login
- Registrierung
- Logout
- Secure password encoding (BCrypt)
- CSRF protection
- Secure cookies
- Custom URL (@username)
- View counter (unique per IP)
- Custom styling options (background color, text color, card color, icon color)
- Responsive design
- Links hinzufügen und entfernen
- Custom icons from icon grid picker (over 600+ Vaadin icons)
- Custom icon colors
- Drag-and-drop support (coming soon)
- Kommentare auf Profilen
- Kommentare hinzufügen (when logged in)
- Eigene Kommentare löschen
- Eigene Kommentare bearbeiten
- Kommentare liken/disliken
- Manage comments on dashboard (delete any comment on your page)
- Profile views tracking (unique per IP address)
- Modern, tabbed interface
- Link management with icon grid picker
- Comment management (view, edit, delete)
- Page style customization (colors)
| Bereich | Technologie | Zweck |
|---|---|---|
| Backend | Spring Boot | Business-Logik |
| Frontend | Vaadin | Benutzeroberfläche |
| Datenbank | PostgreSQL | Persistente Datenspeicherung |
| Migration | Flyway | Datenbank-Versionierung |
| Sicherheit | Spring Security | Authentifizierung & Zugriffskontrolle |
| Risiko (OWASP 2025) | Warum? | Implementierungsbeispiele |
|---|---|---|
| A01:2025 – Broken Access Control (Pflicht) | Zentral für die App! Benutzer können nur ihre eigenen Links/Kommentare bearbeiten. | - Role-Based Access Control (RBAC). - Object-Level Security (z. B. nur der Besitzer darf Kommentare löschen). - CSRF-Schutz für sensitive Aktionen. |
| A05:2025 – Injection | Klassisches Risiko für Web-Apps mit Benutzereingaben (Kommentare, Links, Suchfelder). | - Vaadin-Sanitization (z. B. TextField mit setMaxLength). - Prepared Statements (Spring Data JPA schützt vor SQLi). - Content Security Policy (CSP) gegen XSS. |
| A07:2025 – Authentication Failures | Login/Registrierung ist kritisch! Schwache Passwörter, Session-Hijacking oder Brute-Force-Angriffe sind möglich. | - Password-Encoding (BCrypt mit Spring Security). - Secure Cookies (HttpOnly, Secure, SameSite). - Rate-Limiting für Login-Versuche. - 2FA (optional, z. B. mit TOTP). |
| A02:2025 – Security Misconfiguration | Standardrisiko für Spring Boot + Docker. Fehlende HTTPS, offene Debug-Endpoints oder Default-Passwörter sind häufig. | - Secure Headers (HSTS, CSP, X-Frame-Options). - Deaktivierung von Debug-Modi in Produktion. - Minimale Docker-Images (keine Root-Rechte). - Flyway-Sicherheit (keine SQL-Injection in Migrationen). |
- Docker CLI
- IntelliJ IDEA (oder andere IDE)
- JDK 21+
-
Repository klonen:
git clone https://github.com/nijasc/Modul183-Linus-Louis-Nils.git
-
Umgebungsvariablen einrichten:
cd Modul183-Linus-Louis-Nils cp example.env local.env -
Projekt in IntelliJ IDEA öffnen
-
Projekt mit der vordefinierten "Run"-Konfiguration starten
- ✅ NAVBAR: Login/Signup only visible to non-logged in users
- ✅ NAVBAR: Dashboard button only visible to logged in users
- ✅ PROFILE: Views only increment once per IP address
- ✅ HOMEPAGE: Modern homepage with hero section, features, how it works, and CTA
- ✅ STYLING: All pages restyled with modern, clean design
- ✅ COMMENTS: Full comment system with add, edit, delete
- ✅ COMMENTS: Like system for comments
- ✅ COMMENTS: Site owner can delete any comment on their page
- ✅ COMMENTS: Users can edit and delete their own comments
- ✅ DASHBOARD: Comment management section
- ✅ DASHBOARD: Modern tabbed interface
- ✅ ICONS: Replaced combobox with visual icon grid picker
- ✅ ICONS: Added icon colors for links
- ✅ STYLING: Page style customization (background, text, card, icon colors)
- ✅ UI/UX: Smooth animations and transitions
- ✅ UI/UX: More icons throughout the app
- ✅ UI/UX: Modern cards with hover effects
- ✅ SECURITY: CSRF protection enabled
- ✅ SECURITY: Content Security Policy headers
- ✅ SECURITY: Secure headers (X-Frame-Options, etc.)
- ✅ ARCHITECTURE: Modular component-based architecture
- ✅ CODE QUALITY: Clean code, no magic numbers
- ✅ PROFESSIONAL: App feels professional yet enjoyable to use