Les Partages de Memiks
Tag cloud
Picture wall
Daily
RSS Feed
  • RSS Feed
  • Daily Feed
  • Weekly Feed
  • Monthly Feed
Filters

Links per page

  • 20 links
  • 50 links
  • 100 links

Filters

Untagged links
1 result tagged regex  ✕
Générer un token sécurisé avec String::Random // blog.kharec.info https://blog.kharec.info/post/generer-un-token-securise-avec-string-random/
Mon May 18 15:22:05 2020 archive.org
QRCode

Je bosse en ce moment sur une petite API pour un usage ludique au bureau (j’expliquerais ce que c’est une prochaine fois), et ça m’a inspiré une courte note sur comment générer un token sécurisé en perl.

Pour générer des chaînes de caractères en perl, il existe l’excellent String::Random. Il combine plusieurs méthodes mais elles peuvent s’avérer pauvres pour générer un token, car celui-ci doit :

être une suite aléatoire de caractères alphanumériques
avoir un pattern dynamique

Avoir un pattern dynamique, ça veut dire que la séquence ne doit pas se répéter même si les caractères sont aléatoires, par exemple:

Majuscule-minuscule-chiffre-minucule...

C’est un pattern statique : les caractères auront beau être aléatoires, la suite restera la même. Ce serait donc mieux si le pattern était également aléatoire.

Pour répondre à cette problématique, j’ai combiné la méthode randpattern à la méthode randregex.

randpattern renvoie une chaîne de caractère définie par un pattern respectant :

c : tout caractère latin en minuscule
C : tout caractère latin en majuscule
n : tout chiffre
. : n’importe lequel des trois précédents

Par exemple :

my $s = String::Random->new();
$s->randpattern("cCn"); # renvoie jR4, sK1, pF3...

Utiliser seulement randpattern revient à utiliser un pattern statique puisqu’écrit en dur.

randregex renvoie une suite de caractère aléatoire qui sont choisis dans la regex donnée en argument. Par exemple :

my $s = String::Random->new();
$s->randregex('\d\w\d{5}'); # renvoie 5Z61258, 8R46964, 6l14705...

Les lettres pouvant être majuscules ou minuscules, c’est presque aléatoire. Mais en combinant les deux ainsi :

my $s = String::Random->new();
$s->randpattern($s->randregex('[CcnCn]{20}'));

J’obtiens donc une suite réelement aléatoire de 20 caractères, puisque pris aléatoirement dans l’ensemble CcnCn, et utilisés ensuite par randpattern pour mixer ce pattern afin de cracher le token voulu :

S5eYwWj30MWXEZ4FmWmr
1BW93BAh9ueCsYIY2js7
vW9ytOPVaG571BK40Ove
J491kSRwn9Wh3ZoRZS9J
0LQoVwF512GR4mcLAZ86

Cela permet des suites aléatoires et dont le pattern est dynamique : par exemple, le premier caractère est parfois un chiffre, parfois une majuscule, parfois une minuscule.

perl token random pattern regex
4756 links, including 1670 private
Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community - Theme by kalvn