Je rencontre exactement la même erreur que cette question, c’est-à-dire que je peux télécharger des fichiers JS après les avoir autorisés dans les paramètres, mais lorsque j’essaie de les télécharger, l’URL dans le navigateur change pour l’URL du fichier JS et le message « La modification que vous avez souhaitée a été rejetée » s’affiche.
Started GET "p5ePkm5OoKveknnMjyArlS4PPwS.js" for 192.168.32.1 at 2021-02-22 05:48:52 +0000
Processing by UploadsController#show_short as JS
Parameters: {"base62"=>"p5ePkm5OoKveknnMjyArlS4PPwS", "extension"=>"js"}
Sent file afcdf626f9db8d54a1fb5e8ebcab0ea214d9226a.js (2.2ms)
Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.
Completed 422 Unprocessable Entity in 59ms (ActiveRecord: 0.0ms | Allocations: 17414)
ActionController::InvalidCrossOriginRequest (Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.)
/opt/bitnami/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.3.1/lib/action_controller/metal/request_forgery_protection.rb:266:in `verify_same_origin_request'
Autorisez-vous l’attachement de fichiers *.js aux publications par les utilisateurs ? Avez-vous un besoin légitime pour l’attachement de fichiers JavaScript par vos utilisateurs ? Nous souhaitons simplement confirmer cela absolument avant de poursuivre.
Merci pour votre réponse rapide !
Oui, il s’agit d’une discussion de type Q/R sur le codage, donc joindre des fichiers de code *.js est un cas d’usage légitime.
Bonjour à tous ! Je rencontre le même problème. Nous avons autorisé le téléchargement de fichiers avec l’extension .js, mais personne ne peut les télécharger. Nous n’avons pas encore trouvé de paramètre pour résoudre ce problème. Quelqu’un peut-il aider ?
Pour l’instant, nous copions et collons le code dans la section texte du message.
Cas d’usage : nous disposons d’un fichier .js contenant un code Kickstarter ou une solution à un problème récurrent, et nous souhaitons le partager en pièce jointe afin que les utilisateurs puissent le télécharger et l’intégrer directement dans leurs projets.
Cependant, si nous modifions l’extension du fichier de .js à .txt, le message « La modification que vous avez demandée a été rejetée » réapparaît (cela peut être dû à une optimisation du stockage côté serveur : si le fichier a le même contenu qu’un fichier précédemment téléversé, la nouvelle pièce jointe pointe vers le fichier déjà existant).
J’ai donc légèrement modifié le contenu du fichier .txt (initialement .js) et je l’ai à nouveau téléversé ; cette fois, j’ai pu télécharger le fichier en pièce jointe.
@codinghorror : y a-t-il un risque de sécurité à autoriser le téléchargement de fichiers .js ?
Oui ; nous devrions mener quelques recherches sur les navigateurs pour nous assurer que le fichier est toujours téléchargé sur le disque et jamais exécuté.
Bien sûr, il y a beaucoup de problèmes de sécurité liés à l’autorisation de fichiers JS, c’est donc quelque chose avec quoi nous devons faire extrêmement attention.
Cela fonctionne pour les uploads sur S3 et devrait fonctionner également pour les uploads locaux, mais il semble y avoir une nouvelle mesure de sécurité (relativement récente) de Rails :
ActionController::InvalidCrossOriginRequest (Avertissement de sécurité : une balise intégrée sur un autre site a demandé du JavaScript protégé. Si vous savez ce que vous faites, désactivez la protection contre la falsification sur cette action pour autoriser l’intégration de JavaScript cross-origin.)
J’ai rencontré le même problème, nous avons un forum de questions/réponses sur le codage et nous devons pouvoir partager de gros fichiers js en téléchargement.
J’ai le même problème dans ma communauté. Les gens aimeraient partager des fichiers JS mais lorsqu’ils essaient de les télécharger, ils obtiennent cette erreur :
Started GET "/uploads/short-url/qDlrltMxEIJ2aYYdt8lZ200E3wA.js" for 94.31.111.247 at 2025-07-09 05:53:30 +0000
Processing by UploadsController#show_short as JS
Parameters: {"base62"=>"qDlrltMxEIJ2aYYdt8lZ200E3wA", "extension"=>"js"}
Sent file /var/www/discourse/public/uploads/default/original/1X/baab1fc131be960b601467333f5a690b257daeb0.js (0.3ms)
Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.
Completed 422 Unprocessable Entity in 17ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Les fichiers JS sont dans la liste des extensions de téléchargement autorisées :
Même problème ici. Nous avons des fichiers js qui s’exécutent dans notre propre logiciel, rien qui ne ferait quoi que ce soit dans un navigateur.
Nous avons réussi à résoudre le problème de téléchargement de Discourse en déplaçant tous les téléchargements vers un bucket S3 et en définissant s3_use_cdn_url_for_all_uploads à true. Cela contourne essentiellement le contrôleur de courte URL qui semble être l’obstacle majeur pour les fichiers js.
En détail (de mon IA qui m’a guidé à travers cela) :
Configurer un stockage compatible S3 (par exemple, Cloudflare R2)
Discourse ne peut pas servir en toute sécurité des fichiers .js depuis le disque local. Déplacez-les vers un bucket.
Bucket : Créez un bucket privé (par exemple, my-discourse-bucket).
Clés API : Générez une clé d’accès et une clé secrète.
2. Configurer un domaine CDN personnalisé
Dans Cloudflare (ou votre fournisseur), connectez un domaine personnalisé à votre bucket (par exemple, cdn.example.com). Cela garantit que les fichiers sont servis en tant qu’actifs statiques via une URL directe, contournant le « gardien de sécurité » de Discourse.
3. Mettre à jour les paramètres de Discourse
Dans Admin → Paramètres, configurez vos détails S3. Crucialement, activez les éléments suivants pour garantir que Discourse ne tente pas de « signer » les URLs avec des en-têtes temporaires qui peuvent causer des dysfonctionnements :
s3_use_cdn_url_for_all_uploads : Cochez cette case (C’est l’étape la plus importante).
s3_cdn_url : Définissez sur https://cdn.example.com.
s3_region : Utilisez us-east-1 (pour la compatibilité R2).
4. Migrer les téléchargements existants (facultatif)
Note : Cela n’a PAS fonctionné pour nous pour des raisons inconnues.
Pour corriger les anciens liens dans les messages existants, entrez dans votre conteneur et exécutez :
Bash
# À l'intérieur de /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake