Write more explanation about validator_regexp
continuous-integration/drone/push Build is passing Details

This commit is contained in:
nemunaire 2021-10-25 12:10:30 +02:00
parent 7a9084f84e
commit 8167024de1
1 changed files with 52 additions and 2 deletions

View File

@ -50,10 +50,26 @@ casse.
## Flag modulable
Parfois, plusieurs réponses peuvent être valides. Le système de validation se
contentant d'une seule comparaison de hash, il ne peut valider qu'une seule et
unique solution.
### Exemple
Pour que plusieurs réponses soient valides, il faut pouvoir sélectionner des
parties communes significatives. Ces parties seront utilisées pour la création
du hash initial, et ensuite, lorsqu'il faudra vérifier les soumissions des
participants.
Si par exemple, on estime que plusieurs réponses sont correctes (ici, plusieurs secondes) :
{{% notice warning %}}
Dans aucune circonstance il n'est possible de valider deux chaînes complètement
différentes. Par exemple, il n'est pas possible de valider :\
Donnez un ingrédient de la choucroute : `(choux|pomme de terre|...)`\
Car il n'est pas possible d'avoir un hash qui valide à la fois `choux` et
`pomme de terre`.
{{% /notice %}}
On utilise l'attribut `validator_regexp` pour établir une expression rationnelle
qui servira à sélectionner les parties significatives de la réponse.
Par exemple :
```toml
[[flag]]
@ -62,6 +78,40 @@ raw = '11:22:33+02:00'
validator_regexp = "([0-9]{1,2}):([0-9]{1,2}):[0-9]{1,2}"
```
Ici, nous demandons l'heure de l'exfiltration, mais plusieurs journaux
enregistrent l'exfiltration à des secondes différentes. Les secondes n'étant
pas significative car la période de log donné est sur plus d'une journée, on
peut considérer qu'un participant qui donne la bonne heure et la bonne minute a
répondu à la question. On le laisse cependant recopier le timestamp complet
pour qu'il fasse l'effort de trouver la bonne valeur selon lui (il pourrait
être tenté de ne pas aller au bout de la démarche si on lui demande directement
une valeur approximative).
On garde toujours dans le `raw` la valeur complète attendue, telle que l'on
peut la recopier. Et l'on indique une `validator_regexp` qui sélectionnera la
ou les valeurs significatives, à la fois dans le `raw` et dans les réponses des
participants.
La valeur qui sera hashée pour comparaison sera `1122`, ce qui correspond à la
concaténation de tous les groupes de notre expression rationnelle.
Il est préférable d'écrire une expression rationnelle vague, qui ne fait pas
apparaître les termes de la réponses. Ici, nous aurions pu utiliser
l'expression rationnelle suivante : `(11):(22):(?:33|34|35)`, mais cela aurait
fait apparaître clairement les termes de la réponse. L'attribut étant parfois
transmis aux participants pour être utilisé par l'interface, il est prérérable
de rester vague, en utilisant les caractères joker. Par exemple :
```toml
[[flag]]
label = "Commande utilisée pour l'exfiltration"
raw = 'apt-get search yolo'
validator_regexp = "^(?:sudo *)?(.*)$"
```
Dans cet exemple `sudo` est facultatif, plutôt que de sélectionner `(apt-get
search yolo)$`, on exclut plutôt `sudo`, en le plaçant dans un groupe
non-capturant (`?:`), ce qui ne révèle pas d'information.
## Propriétés