Protéger les téléchargements #109

Closed
opened 2022-04-24 17:32:15 +02:00 by Darks · 5 comments
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 2022-04-24 17:32:15 +02:00
Owner

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à.
Member

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.
Author
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.
Owner

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é.
Member

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 2022-04-26 23:41:13 +02:00
Sign in to join this conversation.
No description provided.