From e3a2ccb82dec71c977603b70dddc4f5b8ad5bcd5 Mon Sep 17 00:00:00 2001 From: Nick Adam Date: Fri, 21 Nov 2025 02:30:11 +0100 Subject: [PATCH] fixed ssl provider section view/edit permission --- PASSWORD_SECURITY_ANALYSIS.md | 74 ++++ backend/main.go | 126 +++++-- backend/spaces.db-shm | Bin 32768 -> 32768 bytes backend/spaces.db-wal | Bin 4087072 -> 168952 bytes frontend/src/App.jsx | 52 ++- frontend/src/components/Sidebar.jsx | 17 +- frontend/src/contexts/PermissionsContext.jsx | 94 ++++- frontend/src/pages/Home.jsx | 52 ++- frontend/src/pages/Providers.jsx | 342 +++++++++++++++++++ 9 files changed, 706 insertions(+), 51 deletions(-) create mode 100644 PASSWORD_SECURITY_ANALYSIS.md create mode 100644 frontend/src/pages/Providers.jsx diff --git a/PASSWORD_SECURITY_ANALYSIS.md b/PASSWORD_SECURITY_ANALYSIS.md new file mode 100644 index 0000000..f55af23 --- /dev/null +++ b/PASSWORD_SECURITY_ANALYSIS.md @@ -0,0 +1,74 @@ +# Passwort-Speicherung Sicherheitsanalyse + +## Aktuelle Implementierung + +### Wie werden Passwörter gespeichert? + +1. **Algorithmus**: `bcrypt` (golang.org/x/crypto/bcrypt) +2. **Cost Factor**: `bcrypt.DefaultCost` (Wert: **10**) +3. **Speicherung**: + - Feld: `password_hash TEXT NOT NULL` in SQLite + - Format: bcrypt Hash-String (enthält automatisch Salt + Hash) + - Beispiel: `$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy` + +4. **Passwortrichtlinie**: + - Mindestens 8 Zeichen + - Großbuchstaben erforderlich + - Kleinbuchstaben erforderlich + - Zahlen erforderlich + - Sonderzeichen erforderlich + +5. **Validierung**: + - Altes Passwort wird bei Änderung geprüft + - `bcrypt.CompareHashAndPassword()` für Login-Validierung + +## Entspricht es aktuellen Sicherheitsstandards? + +### ✅ **Gut implementiert:** + +1. **bcrypt ist ein sicherer, bewährter Algorithmus** + - Speziell für Passwort-Hashing entwickelt + - Verlangsamt Brute-Force-Angriffe durch anpassbare Rechenzeit + - Wird von OWASP und anderen Sicherheitsorganisationen empfohlen + +2. **Automatisches Salting** + - bcrypt generiert für jedes Passwort einen eindeutigen Salt + - Verhindert Rainbow-Table-Angriffe + - Salt wird im Hash-String mitgespeichert + +3. **Passwörter werden nie im Klartext gespeichert** + - Nur gehashte Werte in der Datenbank + - Einweg-Hashing (nicht reversibel) + +4. **Passwortrichtlinie vorhanden** + - Erzwingt starke Passwörter + - Mindestanforderungen erfüllt + +### ⚠️ **Verbesserungspotenzial:** + +1. **Cost Factor könnte erhöht werden** + - **Aktuell**: Cost 10 (DefaultCost) + - **Empfohlen 2024/2025**: Cost 12-14 + - **Begründung**: + - Cost 10 war vor ~10 Jahren Standard + - Moderne Hardware ist schneller + - Cost 12-14 bietet besseren Schutz gegen Brute-Force + - Trade-off: Etwas langsamere Login-Zeit (~100-500ms), aber deutlich sicherer + +2. **Fehlende Sicherheitsfeatures** (optional, aber empfohlen): + - ❌ Rate Limiting für Login-Versuche (verhindert Brute-Force) + - ❌ Passwort-Historie (verhindert Wiederverwendung) + - ❌ Passwort-Ablaufzeit + - ❌ Account-Lockout nach fehlgeschlagenen Versuchen + - ❌ 2FA/MFA Support + +## Empfehlung + +Die aktuelle Implementierung ist **grundsätzlich sicher** und entspricht **modernen Standards**, aber: + +1. **Sofort umsetzbar**: Cost Factor von 10 auf 12-14 erhöhen +2. **Mittelfristig**: Rate Limiting für Login-Versuche implementieren +3. **Langfristig**: Zusätzliche Sicherheitsfeatures (2FA, Passwort-Historie) + +Soll ich den Cost Factor erhöhen? + diff --git a/backend/main.go b/backend/main.go index ab497b4..ff784c8 100644 --- a/backend/main.go +++ b/backend/main.go @@ -982,18 +982,32 @@ func createSpaceHandler(w http.ResponseWriter, r *http.Request) { return } - // Prüfe, ob der Benutzer FULL_ACCESS hat (ohne Space-Beschränkung) - permissions, err := getUserPermissions(userID) - if err != nil || len(permissions.Groups) == 0 { - http.Error(w, "Keine Berechtigung zum Erstellen von Spaces", http.StatusForbidden) + // Prüfe ob User Admin ist - Admins haben immer Vollzugriff + isAdmin, err := isUserAdmin(userID) + if err != nil { + log.Printf("Fehler beim Prüfen des Admin-Status: %v", err) + http.Error(w, "Fehler beim Prüfen der Berechtigung", http.StatusInternalServerError) return } - hasFullAccess := false - for _, group := range permissions.Groups { - if group.Permission == PermissionFullAccess { - hasFullAccess = true - break + // Prüfe, ob der Benutzer FULL_ACCESS hat (ohne Space-Beschränkung) + permissions, err := getUserPermissions(userID) + if err != nil { + http.Error(w, "Fehler beim Abrufen der Berechtigungen", http.StatusInternalServerError) + log.Printf("Fehler beim Abrufen der Berechtigungen: %v", err) + return + } + + // Admin oder HasFullAccess erlaubt Space-Erstellung + hasFullAccess := isAdmin || permissions.HasFullAccess + + // Wenn nicht Admin, prüfe auch Gruppen + if !isAdmin && len(permissions.Groups) > 0 { + for _, group := range permissions.Groups { + if group.Permission == PermissionFullAccess { + hasFullAccess = true + break + } } } @@ -1669,17 +1683,31 @@ func deleteAllFqdnsGlobalHandler(w http.ResponseWriter, r *http.Request) { return } - permissions, err := getUserPermissions(userID) - if err != nil || len(permissions.Groups) == 0 { - http.Error(w, "Keine Berechtigung zum Löschen aller FQDNs. Vollzugriff erforderlich.", http.StatusForbidden) + // Prüfe ob User Admin ist - Admins haben immer Vollzugriff + isAdmin, err := isUserAdmin(userID) + if err != nil { + log.Printf("Fehler beim Prüfen des Admin-Status: %v", err) + http.Error(w, "Fehler beim Prüfen der Berechtigung", http.StatusInternalServerError) return } - hasFullAccess := false - for _, group := range permissions.Groups { - if group.Permission == PermissionFullAccess { - hasFullAccess = true - break + permissions, err := getUserPermissions(userID) + if err != nil { + http.Error(w, "Fehler beim Abrufen der Berechtigungen", http.StatusInternalServerError) + log.Printf("Fehler beim Abrufen der Berechtigungen: %v", err) + return + } + + // Admin oder HasFullAccess erlaubt Löschen aller FQDNs + hasFullAccess := isAdmin || permissions.HasFullAccess + + // Wenn nicht Admin, prüfe auch Gruppen + if !isAdmin && len(permissions.Groups) > 0 { + for _, group := range permissions.Groups { + if group.Permission == PermissionFullAccess { + hasFullAccess = true + break + } } } @@ -1780,17 +1808,31 @@ func deleteAllCSRsHandler(w http.ResponseWriter, r *http.Request) { return } - permissions, err := getUserPermissions(userID) - if err != nil || len(permissions.Groups) == 0 { - http.Error(w, "Keine Berechtigung zum Löschen aller CSRs. Vollzugriff erforderlich.", http.StatusForbidden) + // Prüfe ob User Admin ist - Admins haben immer Vollzugriff + isAdmin, err := isUserAdmin(userID) + if err != nil { + log.Printf("Fehler beim Prüfen des Admin-Status: %v", err) + http.Error(w, "Fehler beim Prüfen der Berechtigung", http.StatusInternalServerError) return } - hasFullAccess := false - for _, group := range permissions.Groups { - if group.Permission == PermissionFullAccess { - hasFullAccess = true - break + permissions, err := getUserPermissions(userID) + if err != nil { + http.Error(w, "Fehler beim Abrufen der Berechtigungen", http.StatusInternalServerError) + log.Printf("Fehler beim Abrufen der Berechtigungen: %v", err) + return + } + + // Admin oder HasFullAccess erlaubt Löschen aller CSRs + hasFullAccess := isAdmin || permissions.HasFullAccess + + // Wenn nicht Admin, prüfe auch Gruppen + if !isAdmin && len(permissions.Groups) > 0 { + for _, group := range permissions.Groups { + if group.Permission == PermissionFullAccess { + hasFullAccess = true + break + } } } @@ -4390,8 +4432,9 @@ func hasSpaceAccess(userID, spaceID string) (bool, error) { return false, err } - // Wenn der Benutzer keine Gruppen hat, hat er keinen Zugriff - if len(permissions.Groups) == 0 { + // Wenn der Benutzer keine Gruppen hat und nicht Admin ist, hat er keinen Zugriff + // Admins haben immer Zugriff (wird bereits oben geprüft) + if !isAdmin && len(permissions.Groups) == 0 { return false, nil } @@ -4430,8 +4473,9 @@ func hasPermission(userID, spaceID string, requiredPermission PermissionLevel) ( return false, err } - // Wenn der Benutzer keine Gruppen hat, hat er keine Berechtigung - if len(permissions.Groups) == 0 { + // Wenn der Benutzer keine Gruppen hat und nicht Admin ist, hat er keine Berechtigung + // Admins haben immer alle Berechtigungen (wird bereits oben geprüft) + if !isAdmin && len(permissions.Groups) == 0 { return false, nil } @@ -4484,12 +4528,36 @@ func getAccessibleSpaceIDs(userID string) ([]string, error) { return []string{}, nil } + // Prüfe ob User Admin ist - Admins haben Zugriff auf alle Spaces + isAdmin, err := isUserAdmin(userID) + if err == nil && isAdmin { + // Hole alle Spaces für Admin + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + defer cancel() + + rows, err := db.QueryContext(ctx, "SELECT id FROM spaces") + if err != nil { + return []string{}, err + } + defer rows.Close() + + var spaceIDs []string + for rows.Next() { + var spaceID string + if err := rows.Scan(&spaceID); err == nil { + spaceIDs = append(spaceIDs, spaceID) + } + } + return spaceIDs, nil + } + permissions, err := getUserPermissions(userID) if err != nil { return []string{}, err } // Wenn der Benutzer keine Gruppen hat, hat er keinen Zugriff + // (Admin wurde bereits oben behandelt) if len(permissions.Groups) == 0 { return []string{}, nil } diff --git a/backend/spaces.db-shm b/backend/spaces.db-shm index 99be2a6a6993f6ab7af072c89eb4c19de54c9944..83ea5fba082ac93cc57774034164be0cd40e2689 100644 GIT binary patch delta 374 zcmb7;F;2rk6h!CmdLe5dtZg7p2oMKwNRc9<;Ti~W03<}q5#oXiARhvW3dt2UCqU)^ zhzf~11xf+47DZaVG@6;G{a;%YswmVf{g}Xyr37$e`iROePoL|%sgL@+HMwY?Jq>Rj z%;SIGbH5pX_h)JT@cqn|*P$!l0%y8p{qibImfCBOM5*T#zlTjKE=i52y(am+UKP2Q zX*F=4ZM%vH9So3@Wg@$@T5Jn3Qe+sh&Xw+B$gohxBEbpcx6+3g`(R9nt>)raM{8`5 vjYRsiTFUp^po(2CTChg4P+DQV39{$SSi?_lV;@JXb7fcHu!92}vu5%O^5{#| literal 32768 zcmeI5WpEwI4uy4&!psZ~Gcz+YGcz+YGcz+YGcz;eW|^~$*}UmjnR+hAV<&l8ue0f? zQgu&DtyX{19pCxkzHy#p5Oe+P2t=YhR*_Urzd<{VJUZLM4Nf=Y&}b>2UdZyS=B1&h zYsGm@duRTCFXQ*Quge{GTW4(v<49OXqWJ2&W4`s_9DU>$c4j<;BOx6L2`o47$oqMw$9dWk%(z<4ju?b9Xe1>-`LcD}jBaprpYGy4fh z|Eh6$`F~sEe&g`HzqrmG%sx!(wVrSLcmde?w~m+3_>P|hj+nKLPm^cA`7(OHKE3Qr zi~+4>{J3@IW#={ich7wl|AEEsJ4Y^Cul)q(%Y8<8&G#A)%x_T73#=v*`l<>4>dNT7 z#@)So>Al7Sn-`e=@ACVm>juO)Q6PM+{(sLT|ML1OeEdEi1IkBYCm%-d<4BSh{iIHt z>_tDh)2495#}T7e7%mH>&tDueEQvwm!0d!ZN2Q=x_0;GwqEwGKfkS)y8FU3E4~V^aC-HH_&6C^u=hN7_dbjnm3*p$BcZWCCo0#c{f8Y1r_Y3nLV%{Un`$Ayx z_&7FRu>_=h6~C^HiP^k|n0UNu-Po8qGIsvOn?L*~=2J1S|ndz!I9w$y(u!JBn`t}kse^T_&eA2iUbpFCJ*!vr zwmvfdOcf*-oc~RWEIyK2GD&f1DQ%>kbdXLmLJr6oxh3CAR`kMUWM_UBVo@$5HIvrY z7CK&!1zD6qg5qDZNN4FQ!)2n(l*O`A*2`AeEvMzGJdjW1sr)KL7(_*E_#h3kAU}$u zJgTBD8lyEjq9+DmB*tSp=3*(1pO;IWHf)>D2dZUR39-tz1$_d^ELYv(^8v z$o@n5O>$tMIY7Z)0TPJjoc5Mm3QHZyZfie4QtyuPk$fuONlyI6cPHk5Cer8gTCzIT^sy+C;i^Bz2f|Xc@lR2O3xRc?un3mN#Hped|vxJn93Q|RCNCRms&7_O; zlUcGyuE}TeyM#p?Btd32=V@N&W46>z+FOU}1f8sNbeXQwjk-gR>Uq7UcP-tQ=>9VU z1zD1nIfc9IGe3|7l$5ekQL0K!=_>tYw(OPb^0{PT3!dQ(e!xCDOy}xyTiJnd3{L98 zEX69U%lhod&K%B>9L=d*z(rib_1wta46hM2rpDHMT1D%=$GOca`J|ZCmj>EOyJ~+O zsnc|UuGUSu|2?J>oND>?V=2PYtjc<9z)tMK5gf%aoW_M*%%$AGP29r>8cAbm9L=v) zwcdN2=j6^WI_1&hdO@%2z4w^I>(^NDol%T^*`L#Sp11iCzu{AM(22TR_uBmWNm@in zCmAKLHq;ZAjUP7e>TPlM;{eX!1>WJu{FdLbqfXL2y3c0VPf9~LzZ4ML`9+!Zl1)lU zIjJPoq?R<4CemEG$pD!n`{agvA%93X#6?o1MFCVp6Li90OvHRF$5!mcQQXF3e1@m^ z6~Zu#!Z`F{YG!3i_U2jMlB@*D|DyLgr7{jz1y|i!9zU7Ykb5n`3s-h zw_gvqrKP-7mg-Vl8c9=WA>C!5%$5CeQ@)fxB|PFG8PcI3s-r17V+bZ;0ajoe_Td=r z-~)V)@9-PIu#C#MOu{tG##ZdZbG*e5`8B&}KOLb{b-u3DUAE#qvha3?!)gpoq$xF{ z7S%FZS!-MF9)Md(4;dt5WQxp_C9+C3$Tm497v#45AkRb*0nrd2$&ntpPza?^0X0w$ z&Cmv2&>L5fgUhMfNKabA9)#_1@Fmb%ddgrKD^q2@ES1%=QMSu*xhQw!iF_qL%3l%! z5fL2;kOCQy8--CC6;TuQ(Hw2j6@4%iqcIsXu@Eb<9^0`W$8i={aTibU1-{4cAj2^l z<1s1IGAGNh8XK}TyK*4Mawb=BGxzc+FY+!w;rINVAvCha)g+om3utjIr`5Evw$^Ss zKu76xU8rkxvmVe>dQoraefy~kzQq;nBWo+YWQdHDX|h0;$r{-tJLH61lDqPud@Vo8 za|ww^h=GJiiHyjDA}E7OsD%b-fp+MIz8Hovn1WeYgjLvp9XNm!IEQPvhY#^3e!w44 zhG%rfXELT^E|z6=Hewrg;~d5D&u9kER^N4RyNB{IVqRro_r+V znBTfbC`3j~Btj}=LS7U_SyV=CG(=0ZM|bqYaE!%N%*JA@#zySKL7c>ST*rNUgs<=; z{zM2yU<@W;a;9f)mSYVzW?OdWV2(c(V4nf*XdS0q-XT9-qMFbR{j40Pjy+T diff --git a/backend/spaces.db-wal b/backend/spaces.db-wal index 06c95e9d86786ca8c39b51379937b64d5fe31a5c..31d02e78cadebc0ac3766c212dff452a2a785865 100644 GIT binary patch delta 23094 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

vZQ!ZrhBmPWbf=U9l80rK9PD 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�UGC!^912 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 { return children } +// Group Required Route Component - User muss einer Berechtigungsgruppe zugewiesen sein +const GroupRequiredRoute = ({ children }) => { + const { isAuthenticated, loading } = useAuth() + const { isAdmin, hasFullAccess, accessibleSpaces, loading: permissionsLoading } = usePermissions() + + if (loading || permissionsLoading) { + return ( +

+
+ + + + +

Lade...

+
+
+ ) + } + + if (!isAuthenticated) { + return + } + + // Admin oder User mit Gruppen haben Zugriff + const hasGroups = isAdmin || hasFullAccess || (accessibleSpaces && accessibleSpaces.length > 0) + + if (!hasGroups) { + return ( + + ) + } + + return children +} + // Public Route Component (redirects to home if already logged in) const PublicRoute = ({ children }) => { const { isAuthenticated, loading } = useAuth() @@ -105,13 +148,14 @@ const AppContent = () => { } /> } /> - } /> - } /> - } /> + } /> + } /> + } /> } /> } /> } /> - } /> + } /> + } />