1
votes

Comment masquer l'URL de téléchargement de Firebase Storage à partir de l'onglet réseau des navigateurs?

J'utilise l'authentification Firebase pour télécharger des images à partir du stockage Firebase. J'utilise également les référents HTTP de l'API google pour le blocage par domaine afin que mon image du stockage Firebase ne soit accessible qu'à partir de mon site Web. Mais lorsque je vais dans l'onglet réseau de mon navigateur, je peux voir l'URL de téléchargement de l'image. De cette manière, n'importe qui peut télécharger mon image et l'utiliser. Que dois-je faire pour que mes images soient sécurisées?

PS: J'utilise le SDK de stockage Firebase et en suivant la documentation lorsque j'exécute ce code ci-dessous

storageRef.child('images/stars.jpg').getDownloadURL().then(function(url) {
  // `url` is the download URL for 'images/stars.jpg'
  var img = document.getElementById('myimg');
  img.src = url;
}).catch(function(error) {
  // Handle any errors
});

Je peux voir l'URL de téléchargement dans l'onglet Réseau de mon navigateur.


0 commentaires

3 Réponses :


1
votes

Vous ne pouvez pas. Lorsque vous abandonnez l'accès à une URL de téléchargement Cloud Storage à l'une d'entre elles, de quelque manière que ce soit, vous faites implicitement confiance à cet utilisateur pour son accès. Ils sont libres de le partager avec qui ils veulent. Si vous ne faites pas confiance à cet utilisateur, ne lui donnez pas l'URL.

Si vous n'aimez pas la façon dont cela fonctionne, n'utilisez pas d'URL de téléchargement et n'autorisez que les téléchargements sécurisés via le SDK Firebase. À ce stade, vous faites confiance à l'utilisateur qu'il ne prendra pas le contenu et ne le téléchargera pas ailleurs et ne générera pas une URL vers celui-ci.


2 commentaires

Je ne donne accès à mon stockage cloud à personne en dehors de mon site Web. De plus, j'ai ajouté le domaine de mon site Web aux référents HTTP de l'API google pour bloquer l'accès de tous les sites Web autres que le mien. J'utilise également l'authentification Firebase. Tout fonctionne bien sur mon site Web, mais le problème est que lorsque j'ai l'onglet Réseaux, je peux voir l'URL de téléchargement de l'image de Firebase et si je copie ce lien d'image dans un nouvel onglet du navigateur, il s'affiche ... :(


Oui, je comprends le problème. Je dis que vous pouvez toujours vous attendre à ce que les utilisateurs finaux puissent voir cette URL.



0
votes

Vous semblez avoir deux options pour autant que je sache. Malheureusement, ils sont fondamentalement identiques, car vous devrez probablement les implémenter tous les deux.

La première option consiste à révoquer le jeton d'accès sur les fichiers individuels que vous ne souhaitez pas être autorisé à télécharger. Malheureusement, cela signifie également que vous ne pouvez pas les afficher partout où vous le faites actuellement via l'URL car elle rompt ce lien. Découvrez pourquoi c'est difficile à faire.

La deuxième option consiste à utiliser des références de stockage pour les télécharger côté client, mais cela ne fonctionne que si vous utilisez le SDK Firebase dans une application Web et non dans un simple site Web statique. Je pense que cela ne devrait pas exposer l'URL sur l'onglet réseau du navigateur si l'application est correctement configurée.

Vous pouvez implémenter la deuxième option sans la première et l'URL ne devrait pas être exposée, mais vous ne pouvez plus utiliser l'url et devez utiliser les deux options si vous implémentez la première ...: / meh .. . firebase est génial, mais rien n’est parfait


0 commentaires

0
votes

Cela semble fonctionner, je mettrai à jour si ce n'est pas le cas

Edit: "Cependant, la configuration CORS ne s'applique qu'aux requêtes d'API XML," que l'on peut simplement accéder au fichier quand même .. https://cloud.google.com/storage/docs/cross-origin

  1. Console GCP >_
  2. icône crayon> créer cors.json [{"origin": ["https://yourorigin1.com"], "method": ["GET"], "maxAgeSeconds ": 3600}]
  3. retournez au shell et entrez gsutil cors set cors.json gs: //yourproject1.appspot.com

https://stackoverflow.com/a/58613527/11711280

Solution de contournement:

Je vais créer toutes les règles resource.data.authorId, resource.data.members, etc. Je dois faire correspondre le request.auth.uid (ou contrôler les appels dans le code client à des uid non anonymes), et me connecter chaque utilisateur anonyme, dans un premier temps. Ensuite, uid ne sera pas nul lors de l'utilisation d'une firebase initialisée depuis notre domaine


0 commentaires