fix(security): patch 3 vulnerabilities — IDOR, ownership bypass, XSS
V1: Add owner-scoped folder pagination (list_folders_by_owner_paginated) - New method in FolderRepository trait, PG implementation, service & handler - Prevents IDOR by filtering folder listings to authenticated user V2: Enforce ownership checks on folder mutations - rename_folder, move_folder, delete_folder now require caller_id - Service verifies folder.owner_id == caller_id (returns 404 on mismatch) - Propagated to folder_handler, batch_handler, batch_operations, webdav_handler - delete_folder_with_trash upgraded from OptionalAuthUser to AuthUser - download_folder_zip now checks ownership before streaming V3: Fix XSS in frontend via DOM APIs - sharedView.js: innerHTML → createElement + textContent - contextMenus.js: innerHTML → DOM construction for share dialog Cleanup: removed unused OptionalAuthUser import, updated all stubs/mocks
This commit is contained in:
@@ -339,5 +339,13 @@
|
||||
"folder_deleted": "Ordner in Papierkorb verschoben",
|
||||
"item_deleted_permanently": "Element endgültig gelöscht",
|
||||
"trash_emptied": "Papierkorb erfolgreich geleert"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 Element ausgewählt",
|
||||
"n_selected": "{{count}} Elemente ausgewählt",
|
||||
"confirm_delete": "Möchten Sie wirklich {{count}} Elemente in den Papierkorb verschieben?",
|
||||
"move_title": "{{count}} Element(e) verschieben",
|
||||
"add_favorites": "Zu Favoriten hinzufügen",
|
||||
"move_copy": "Verschieben oder kopieren"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,5 +341,13 @@
|
||||
"trash_emptied": "Trash emptied successfully",
|
||||
"title": "Notifications",
|
||||
"empty": "No notifications"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 item selected",
|
||||
"n_selected": "{{count}} items selected",
|
||||
"confirm_delete": "Are you sure you want to move {{count}} items to trash?",
|
||||
"move_title": "Move {{count}} item(s)",
|
||||
"add_favorites": "Add to favorites",
|
||||
"move_copy": "Move or copy"
|
||||
}
|
||||
}
|
||||
@@ -341,5 +341,13 @@
|
||||
"trash_emptied": "Papelera vaciada correctamente",
|
||||
"title": "Notificaciones",
|
||||
"empty": "Sin notificaciones"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 elemento seleccionado",
|
||||
"n_selected": "{{count}} elementos seleccionados",
|
||||
"confirm_delete": "¿Estás seguro de que quieres mover {{count}} elementos a la papelera?",
|
||||
"move_title": "Mover {{count}} elemento(s)",
|
||||
"add_favorites": "Añadir a favoritos",
|
||||
"move_copy": "Mover o copiar"
|
||||
}
|
||||
}
|
||||
@@ -314,5 +314,13 @@
|
||||
"accessed": "دسترسی یافته",
|
||||
"empty_state": "هنوز هیچ پروندهٔ اخیر وجود ندارد",
|
||||
"empty_hint": "پروندههایی که باز میکنید اینجا ظاهر میشوند"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "۱ مورد انتخاب شده",
|
||||
"n_selected": "{{count}} مورد انتخاب شده",
|
||||
"confirm_delete": "آیا مطمئنید که میخواهید {{count}} مورد را به سطل زباله منتقل کنید؟",
|
||||
"move_title": "انتقال {{count}} مورد",
|
||||
"add_favorites": "افزودن به موارد علاقهمند",
|
||||
"move_copy": "انتقال یا کپی"
|
||||
}
|
||||
}
|
||||
@@ -339,5 +339,13 @@
|
||||
"folder_deleted": "Dossier déplacé vers la corbeille",
|
||||
"item_deleted_permanently": "Élément supprimé définitivement",
|
||||
"trash_emptied": "Corbeille vidée avec succès"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 élément sélectionné",
|
||||
"n_selected": "{{count}} éléments sélectionnés",
|
||||
"confirm_delete": "Voulez-vous vraiment déplacer {{count}} éléments vers la corbeille ?",
|
||||
"move_title": "Déplacer {{count}} élément(s)",
|
||||
"add_favorites": "Ajouter aux favoris",
|
||||
"move_copy": "Déplacer ou copier"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@
|
||||
"fa": "Persiano",
|
||||
"fr": "Francese",
|
||||
"de": "Tedesco",
|
||||
"pt": "Portoghese"
|
||||
"pt": "Portoghese",
|
||||
"it": "Italiano"
|
||||
}
|
||||
},
|
||||
@@ -340,5 +340,13 @@
|
||||
"folder_deleted": "Cartella spostata nel cestino",
|
||||
"item_deleted_permanently": "Elemento eliminato definitivamente",
|
||||
"trash_emptied": "Cestino svuotato con successo"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 elemento selezionato",
|
||||
"n_selected": "{{count}} elementi selezionati",
|
||||
"confirm_delete": "Sei sicuro di voler spostare {{count}} elementi nel cestino?",
|
||||
"move_title": "Sposta {{count}} elemento/i",
|
||||
"add_favorites": "Aggiungi ai preferiti",
|
||||
"move_copy": "Sposta o copia"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,5 +339,13 @@
|
||||
"folder_deleted": "Pasta movida para a lixeira",
|
||||
"item_deleted_permanently": "Item excluído permanentemente",
|
||||
"trash_emptied": "Lixeira esvaziada com sucesso"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "1 item selecionado",
|
||||
"n_selected": "{{count}} itens selecionados",
|
||||
"confirm_delete": "Tem certeza de que deseja mover {{count}} itens para a lixeira?",
|
||||
"move_title": "Mover {{count}} item(ns)",
|
||||
"add_favorites": "Adicionar aos favoritos",
|
||||
"move_copy": "Mover ou copiar"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,5 +276,13 @@
|
||||
"accessed": "访问于",
|
||||
"empty_state": "没有最近文件",
|
||||
"empty_hint": "您打开的文件将显示在这里"
|
||||
},
|
||||
"batch": {
|
||||
"one_selected": "已选择 1 个项目",
|
||||
"n_selected": "已选择 {{count}} 个项目",
|
||||
"confirm_delete": "确定要将 {{count}} 个项目移至回收站吗?",
|
||||
"move_title": "移动 {{count}} 个项目",
|
||||
"add_favorites": "添加到收藏夹",
|
||||
"move_copy": "移动或复制"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user