checkMediaPerm(): Ziel nicht geprüft bei Verschieben + keine Kaskadierung auf Unterkategorien
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- php
- Ambito
- api, authorization, backend, security
Direzione di ricerca
Inizia in lib/RoutePackage/Media.php con checkMediaPerm(), hasCategoryPerm(), handleUpdateMedia(), handleUpdateCategory() e handleDeleteCategory(). Confronta i controlli della categoria di origine con redaxo/src/addons/mediapool/pages/media.list.php righe 46-50. Il lavoro è completato quando le operazioni di spostamento verificano sia l'origine sia la destinazione, l'opzione permitted_only può verificare gli antenati senza modificare il comportamento predefinito e i percorsi di autorizzazione interessati rimangono protetti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
checkMediaPerm() in Media.php prüft bei Verschiebe-artigen Operationen nur die Quelle, nicht das Ziel. handleUpdateCategory() und handleDeleteCategory() prüfen Zugriff auf die zu ändernde Kategorie selbst (checkMediaPerm($user, $Category->getId()), Z. 1132 bzw. Z. 1100) statt auf deren Elternkategorie, wodurch eine zugewiesene Ordnergrenze durch den betroffenen User selbst aufgelöst werden kann. handleUpdateMedia() prüft beim Verschieben einer Datei nur die alte Kategorie (Z. 891), nicht die neue category_id aus dem Body (Z. 912 bzw. Z. 940), wodurch eine Datei in jede beliebige fremde Kategorie verschoben werden kann.
Lösungsvorschlag: Bei Operationen, die category_id/parent_id ändern, zusätzlich zur Quelle auch die Zielkategorie prüfen.
Zusätzlich prüft hasCategoryPerm($categoryId) immer nur exakten Treffer, nie Vorfahren. Sobald Zugriff auf eine Kategorie auch für ihren Unterbaum gelten soll, führt das dazu, dass Lesen/Hochladen/Löschen/Verschieben in einer Unterkategorie einer freigegebenen Kategorie mit 403 fehlschlägt. Betrifft Liste, Upload, Löschen, Get/Get-File, Update.
Lösungsvorschlag: Den bestehenden permitted_only-Opt-in um eine kaskadierende Prüfung erweitern – bei gesetztem Flag zusätzlich zum exakten Treffer die Vorfahrenkette prüfen (rex_media_category::getPath(), pro Vorfahre hasCategoryPerm()). Ändert nichts am Default-Verhalten.
Der klassische Medienpool hatte dieselbe Fehlerklasse (spiegelbildlich: updatecat_selectedmedia prüfte nur die Ziel-Kategorie, nicht die Quell-Kategorie jeder ausgewählten Datei), das ist im Core aber inzwischen behoben – die Quell-Kategorie wird pro Datei geprüft, siehe Z. 46-50. Guter Referenzpunkt für den Fix hier.
- Lingua principale
- PHP
- Stelle
- 20
- Fork
- 0
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di FriendsOfREDAXO/api
-
Medien löschen hinter Web Application Firewalls blockiert (Pfad enthält /delete)Forse già presa @skerbis l’ha presa 6 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
FriendsOfREDAXO/api#84 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
FriendsOfREDAXO/api#83 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
FriendsOfREDAXO/api#81 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
FriendsOfREDAXO/api#65 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
FriendsOfREDAXO/api#62 ·
Tutte le issue di FriendsOfREDAXO/api
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
EasyCorp/EasyAdminBundle#7875 ·
I maintainer di solito rispondono entro 2 giorni
-
[Sync EN] PDOException::getCode(): document the int|string return typeForse già presa @lacatoire l’ha presa oggi. Apertasync-en
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
sync-en
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
coollabsio/coolify#12299 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno