Après une discussion sur ma question à propos de Base64 ne faisant pas de sécurité pour les identifiants Firestore ICI Je voudrais savoir comment on peut encoder une chaîne à un identifiant de document« Safe »Firestore. p>
Voici le problème: P>
/ code> strong> non sûr pour les ID de document Firestore strong> comme déclaré ICI LI>
ul>
J'ai demandé à propos de la base64 dans une autre question et qui n'est pas en sécurité car elle contient / code> p>
Alors, quel pourrait être un moyen sûr de coder cette chaîne sans perdre l'entropie du nom d'utilisateur que le service externe fournit. Cela signifie qu'il pourrait y avoir un nom d'utilisateur tel que dimi / test1 code> et un autre comme dimitest1 code> alors simplement des caractères de dénudage n'est pas une option. p>
Également depuis que ce service dispose d'une API open et de mon service expose l'ID de document via URLS, je voudrais ne pas exposer les autres noms d'utilisateur du service via mes URL d'applications. p>
Toute suggestion? p>
3 Réponses :
J'ai utilisé base58 et c'était le plus sûr que je puisse rechercher pour p>
pourquoi ne pas utiliser hash ex. SHA256? C'est une longueur fixe et son pool de caractères sont [a-fa-f0-9] code> Stackoverflow.com/a//a/ 12618366 tout en préservant l'entropie.
Utiliser Encoduri () suivi de SHA256. Cela contrainte l'ID de document à
Must be valid UTF-8 characters Must be no longer than 1,500 bytes Cannot contain a forward slash (/) Cannot solely consist of a single period (.) or double periods (..) Cannot match the regular expression __.*__
Ses documents de 1 m dans chaque appel. WONT SHA256 nécessite plus de CPU et pourquoi pas Base58?
Que diriez-vous de «nouveau texturexoder ('utf-8'). Encodé (message);« En ce qui concerne URF-8?
Pourquoi ne pas simplement utiliser le codéveloppeur ('dimi / test1')?
@ Harsh989 Certains caractères ne sont pas échappés dans un encodeur.
edit strong> Afin de transformer des chaînes en uniques d'utilisation très rapide Vous pouvez utiliser MD5 ou SHA256, car les deux prises à la fois, la moyenne 2.2S pour calculer 1 million d'identifiants uniques. P> ici est le code: p> J'ai adapté le code de FireBase et le rendit disponible directement sur votre noeud. JS avec un test personnalisé pour vous. Il prend jusqu'à 3 ans pour 1 million d'identifiants et seulement 300 ms pour 100 000 ID qui est votre approche d'utilisation quotidienne considérée. P> Ceci utilise Voici la fonction enveloppée avec l'exemple d'utilisation: p> Utilisez simplement Puisque Firebase est principalement open source, nous pouvons trouver le générateur officiel actifié utilisé dans Si vous allez rejoindre 2 IDS, n'utilisez aucune barre oblique La limitation de Firestore dans les identifiants de document est de 1500 octets afin que vous ayez beaucoup à jouer avec. p> Plus d'infos: https://firebase.google.com/docs/ Firestore / quotas # limite p> p> crypto.createhash () code> à la place. Le résultat sera le même pour une entrée de chaîne donnée. P>
Crypto code> considéré très sûr si elle est utilisée dans le nœud.js Environnement. P>
noeud thisfile.js code> et vous verrez Votre résultat. p>
nœud.js code> pour générer les identifiants ici: https://github.com/googleapis/nodejs-firestore/blob/4f4574afaa8cf817d06b5965492791c2eff01ed5/dev /src/util.ts#l52 p>
/ code>, comme vous le savez qu'il n'est pas autorisé, utilisez plutôt Underscore
_ code> ou rien du tout puisque vous avez le contrôle de la longueur d'un identifiant, T A Personne, vous devriez savoir comment scinder l'ID en conséquence (40 octets contiennent 2 ID de 20 octets par exemple). P>
Je sais que vous avez pris du temps pour écrire cela et pour que je vous remets à coup sûr. Cependant (et répondre également au commentaire), je reçois les identifiants des autres (API). $ {userid} $ {workoutd} code> ne fonctionnerait pas comme l'URI ultérieurement peut être exposé. On pourrait utiliser ceux (d'une URI partagée). Je voudrais donc que ceux qui laisse dire: "base58?" Crypto? Donc, 2 entrées (UserID, WorkoutID) devraient donner un ID Firestore unique. Je pense (de ce que je comprends) cette réponse ne le fait pas correctement? J'apprécie que vous avez pris le temps de m'apprendre à créer des identifiants (et d'utiliser) mais ceux-ci sont donnés: - /
Pour être un peu plus utile, peut-être: Github. com / jimmykane / quantifié-auto / blob / maître / fonctions / s rc / ... Voir comment un élément de la file d'attente est inséré.
Ok je vois, donc vous voulez que le generateidfromptarts code> pour générer la même chaîne pendant que l'entrée est la même, quelle que soit la mesure que vous appelez à nouveau la fonction avec la même entrée?
Correct! Maintenant, je code de base58. Selon mes recherches, c'est bien, mais j'ai peur des collisions, etc. De plus, ma propre réponse est également évitée, elle commence donc à sentir si vous avez mon point.
Vous pouvez transmettre les deux identifiants concaténés comme uniqueId ({$ {userid} $ {workoutid} `) code> pour obtenir le même résultat toujours
Vous pouvez également digérer le hachage de manière différente d'obtenir des résultats uniques plus complexes comme 'utf-8', plus d'info NODEJS.ORG/API/...
Puis-je demander pourquoi vous voulez (en tant qu'utilisateur) de générer l'ID? Firestore dispose déjà d'un générateur d'identifiant de sécurité unique et de Firebase Auth. L'un de ceux-ci devrait vous donner des identifiants uniques pour vos nécessités.
@Ignaciobustos Je ajoute dans une file d'attente que j'ai besoin d'accès sans interruption. Donc, si je peux toujours construire le même identifiant, je peux accéder à cela plus rapidement et avec moins de lecture / écrit. Imaginez que ce soit un service / une fonction d'API qui obtient environ 100 000 appels par jour. est-ce que cela aide?
@Ignaciobustos En outre, je ne sais pas tous les éléments d'une file d'attente en double. L'entrée que je reçois des appels API est la suivante: nom d'utilisateur / workoutid.
@Ignaciobustos Vous pouvez également le considérer comme une cartographie à l'entraînement des utilisateurs de chaque service. Donc, même si l'utilisateur sur ce service met à jour les informations, le même élément de la file d'attente est mis à jour et le moins cher
Oh, je reçois cela très cher d'appeler Firebase pour cela. Alors laissez-moi supposer plus de choses et me corriger sinon. "Userid '(a) &" workouid "(b) est-il connu, n'est-ce pas? Dans ce cas, votre nouveau RelationalDB peut être
$ {userid} $ {workoutd} code> sans aucune barre oblique
/ code> dedans. Si vous ne connaissez pas l'IDS à l'avance, j'ai une autre approche pour générer des identifiants rapidement et fiables, mais il est obligatoire d'utiliser Node.js pour des raisons de sécurité. Faites-moi savoir et je vous écrirai à vous l'approche.
J'ai ajouté une réponse directement au cas où vous auriez besoin de générer complètement les IDSHTTPS: //stackoverflow.com/a/62775792/1240074