Protéger les téléchargements #109

Closed
opened 5 months ago by Darks · 5 comments
Darks commented 5 months ago
Owner

Il est assez facile d’avoir accès à des fichiers qu’on est pas censé pouvoir télécharger. Exemple, un fichier posté dans un forum admin et récupéré avec le widget [[f: <id>]]

Une solution peut être de créer un ID aléatoire lors de l’upload, avec suffisamment d’entropie pour qu’on ne puisse pas réalistement lister les fichiers (64 bits par exemple).

Il est assez facile d’avoir accès à des fichiers qu’on est pas censé pouvoir télécharger. Exemple, un fichier posté dans un forum admin et récupéré avec le widget `[[f: <id>]]` Une solution peut être de créer un ID aléatoire lors de l’upload, avec suffisamment d’entropie pour qu’on ne puisse pas réalistement lister les fichiers (64 bits par exemple).
Darks added the
security
label 5 months ago

Une meilleure solution (je pense) serait de lister dans la route les fichiers liés au post et de n'autoriser le convertisseur Markdown qu'à générer les liens pour ceux-là.

Une meilleure solution (je pense) serait de lister dans la route les fichiers liés au post et de n'autoriser le convertisseur Markdown qu'à générer les liens pour ceux-là.
Collaborator

Au lieu d'un ID aléatoire pourquoi ne pas prendre un UUID ? Il y a une spec et c'est probablement déjà implémenté dans une lib.

Au lieu d'un ID aléatoire pourquoi ne pas prendre un UUID ? Il y a une spec et c'est probablement déjà implémenté dans une lib.
Poster
Owner

L'avantage que je vois à l'UUID, c'est que ça empêche toute énumération.

Le désavantage, c'est que ça oblige à faire un <f: 3db798ec-b58c-4fd9-9ffc-7195ff84daab> ce qui peut être lourd. Après ça reste un copier/coller.

L'avantage que je vois à l'UUID, c'est que ça empêche toute énumération. Le désavantage, c'est que ça oblige à faire un `<f: 3db798ec-b58c-4fd9-9ffc-7195ff84daab>` ce qui peut être lourd. Après ça reste un copier/coller.

Notons déjà qu'un UUID dans l'URL ce serait pas du luxe, histoire qu'on puisse pas énumérer les fichiers par URL.

Pour la syntaxe je reste de l'avis qu'il vaudrait mieux avoir un truc dans le backend. Ce serait pas dur de faire Member.can_access_file() et de décider à partir de là.

Edit : ce par quoi je veux dire qu'on a le droit de poster un lien vers le fichier : le téléchargement reste possible pour tout le monde dès que le lien est publié.

Notons déjà qu'un UUID dans l'URL ce serait pas du luxe, histoire qu'on puisse pas énumérer les fichiers par URL. Pour la syntaxe je reste de l'avis qu'il vaudrait mieux avoir un truc dans le backend. Ce serait pas dur de faire `Member.can_access_file()` et de décider à partir de là. Edit : ce par quoi je veux dire qu'on a le droit de *poster un lien vers le fichier* : le téléchargement reste possible pour tout le monde dès que le lien est publié.
Collaborator

Du coup, avoir un UUID dans l'url pour avoir des fichiers uniques qu'on ne puisse pas énumérer. Peut-être qu'on peut avoir un nom racourci pour le copier-coller (en «nice to have»).

Et pour le truc dans le backend c'est au moment du formattage des liens M↓.

Du coup, avoir un UUID dans l'url pour avoir des fichiers uniques qu'on ne puisse pas énumérer. Peut-être qu'on peut avoir un nom racourci pour le copier-coller (en «nice to have»). Et pour le truc dans le backend c'est au moment du formattage des liens M↓.
Darks closed this issue 5 months ago
Sign in to join this conversation.
No Milestone
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: devs/PCv5#109
Loading…
There is no content yet.