Erst die Sitzung, dann der Schluessel
Der Schluessel kennt keinen Nutzer und landete beim Standardnutzer — auch dann, wenn die App unter derselben Site liegt und der Browser das HoneyOS-Cookie laengst mitschickt (cloud.honeyos.… und honeyos.… sind dieselbe Site, duckdns.org steht auf der Public-Suffix-Liste). Damit trug die HoneyBar in Aether die Farben eines fremden Nutzers. Jetzt sieht /api/apps erst nach der Sitzung, und nur bei eigener Anmeldung: Im offenen Betrieb und hinter einem Anmelde-Proxy gilt jede Anfrage als angemeldet, dort bleibt der Schluessel das letzte Wort. Test dazu, mit zwei Nutzern, damit der Rueckfall auf den einzigen Nutzer das Ergebnis nicht zufaellig richtig aussehen laesst.
This commit is contained in:
1 parent
ffaba616ce
commit
cc7a50c621
4 files changed
+111
-14
No files matched your search
@@ -250,6 +250,22 @@ func noCache(next http.Handler) http.Handler {
|
||||
// damit nur für den lesbar, der ohnehin an die App herankommt.
|
||||
func (s *Server) appsReadable(next func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
// Erst die Sitzung, dann der Schlüssel. Umgekehrt wäre bequemer zu
|
||||
// lesen, aber falsch: Der Schlüssel kennt keinen Nutzer und landet
|
||||
// beim Standardnutzer. Liegt die App unter derselben Site wie HoneyOS
|
||||
// (`cloud.honeyos.…` und `honeyos.…` sind dieselbe), schickt der
|
||||
// Browser die Sitzung längst mit — dann soll die HoneyBar dort auch
|
||||
// die Farben, das Wetter und später die Reihenfolge **dieses** Nutzers
|
||||
// bekommen und nicht die eines fremden.
|
||||
//
|
||||
// Nur bei eigener Anmeldung: Ohne sie gilt jede Anfrage als angemeldet
|
||||
// (offener Betrieb, Proxy davor), und das hier wäre eine offene Tür.
|
||||
if s.auth.Enabled() {
|
||||
if sub, ok := s.auth.SubFromRequest(r); ok {
|
||||
next(w, r, sub)
|
||||
return
|
||||
}
|
||||
}
|
||||
if key := s.cfg.AppsKey; key != "" {
|
||||
given := r.Header.Get("X-HoneyOS-Key")
|
||||
if given == "" {
|
||||
|
||||
Reference in new issue
Block a user