Les téléchargements de médias sécurisés cassent les logos de catégories

Les options « Média sécurisé » + « Activer les téléchargements S3 » semblent casser les logos de catégorie.

J’ai récemment découvert que des documents téléchargés pouvaient être consultés ou téléchargés via un lien URL direct par des utilisateurs qui n’avaient pas accès au message privé dans lequel le document avait été téléchargé. J’avais compris que les téléchargements S3 devaient d’abord être activés pour utiliser la fonctionnalité Média sécurisé, alors je les ai activés en premier et j’ai manuellement copié les fichiers téléchargés du serveur Discourse vers le bucket S3. J’ai ensuite suivi ce post pour activer le Média sécurisé :

Après avoir suivi cette procédure, j’ai dû effectuer un remappage Discourse pour remplacer /uploads/default/ par //nom-du-bucket-etc-etc/. Après le remappage, j’ai exécuté rake posts:rebake et tout semblait correct pour la plupart. Tous les autres fichiers téléchargés (documents et images dans les messages, images de branding du site, etc.) s’affichaient toujours et étaient correctement liés après l’activation du Média sécurisé et l’exécution des tâches rake et de remappage appropriées. J’ai dû réimporter les avatars des utilisateurs et les logos de groupes, mais une fois réimportés, ils s’affichaient correctement et avaient les nouvelles URL courtes et les URL de uploads-média-sécurisés comme prévu.

J’ai constaté que les images de logos de catégorie ne s’affichaient plus. En vérifiant avec le mode développeur de mon navigateur, j’ai remarqué que lors de la réimportation d’une image de logo de catégorie, la bonne URL de uploads-média-sécurisés était créée, affichant l’image correctement. Cependant, dès que je cliquais sur « Enregistrer la catégorie », la page de la catégorie se rafraîchissait et tentait incorrectement de mapper directement vers l’URL non signée AWS S3 de l’image, empêchant ainsi l’affichage de l’image :

Chaque page de Discourse affichant une image de logo de catégorie tente de mapper l’image directement vers l’URL non signée AWS S3 au lieu de l’URL de uploads-média-sécurisés.

Comme solution de contournement, j’ai dû visiter laborieusement chaque objet image de logo de catégorie dans AWS S3 et modifier les permissions en Lecture publique.

J’ai confirmé que ce comportement existe dans les navigateurs Chrome, Firefox et Microsoft Edge. J’ai essayé les tâches rake posts:rebake et uploads:secure_upload_analyse_and_update, mais elles ne semblent rien faire avec le logo de catégorie. Existe-t-il peut-être une autre tâche qui corrigera ces URL d’images de logos de catégorie mal mappées ? Ou est-ce en fait prévu par conception, nécessitant que tous les objets de téléchargement S3 soient en lecture publique, sauf ceux qui sont sécurisés (messages privés) ?

3 « J'aime »

Merci de l’avoir signalé, je ne savais pas que les logos de catégorie existaient :sweat: Je vais jeter un coup d’œil à cela cette semaine et essayer de trouver une solution pour toi ici.

6 « J'aime »

Super ! Merci beaucoup @martin !

3 « J'aime »

Je pense que le problème principal ici est que secure_upload_analyse_and_update est un peu trop rigide lorsqu’il s’agit de déterminer ce qui doit ou non être sécurisé, car la classe UploadSecurity (discourse/lib/upload_security.rb at main · discourse/discourse · GitHub) vérifie au moment du téléchargement si ce type de fichiers publics (par exemple, avatars, logos de catégories, etc.) doit être sécurisé ou non, et ce type n’est pas présent lors de la vérification ultérieure dans la tâche rake.

J’ai une tâche suivie en interne pour améliorer cela en vérifiant tous les emplacements où un fichier téléchargé peut se trouver au moment de cette vérification de sécurité, mais cela prendra du temps et fait partie d’un plan plus large pour stocker les références de téléchargement de manière plus organisée.

Quoi qu’il en soit, je suis en train de préparer une PR pour résoudre ce problème en considérant les logos et les arrière-plans de catégories comme des types publics lorsqu’on détermine s’ils doivent être sécurisés ou non. Une fois cette PR fusionnée et que vous aurez mis à jour, il vous suffira de réimporter les images de catégories et tout devrait être en ordre.

4 « J'aime »