je crois que j'ai levé un nouveau problème dans l'envoi des notifications de formidable avec un fichier à récupérer ; tu utilise _action_auteur(), mais cette fonction s'appuie sur la méta alea_ephemere, qui est renouvelée par défaut toutes les 12 heures...
Je confirme le problème.
Sur quel autre hash que alea_ephemere pourrait on se baser, qui serait immuable (au moins pour la durée de validité de _FORMIDABLE_EXPIRATION_FICHIERS_EMAIL) ?
On pourrait peut être définir un hash spécifique dans spip_meta, à l'installation de formidable, auquel on ne toucherait plus ?
Avec une fonction qui le crée s'il n'existe pas lors de la mise à jour ?
Je ne pense pas qu'on ait forcément besoin de cela en fait. En effet, si je relis bien le code de _action_auteur ca produit en gros un hash à partir des 4 paramètres. EN gros ca prend les 4 paramètres, ca les concatènes et ca produit un hash.
Les 4 paramètres sont:
$action => recuperer email + des informations précise sur le fichier à recuperer > on s'assure donc que le hash est différent selon le fichier
$id_auteur => ici à '', car on ne veut pas vérifier l'identification de l'auteur, c'est le risque qu'on accepte de prendre à envoyer le lien par email : on suppose que seule la personne qui recoit le mail peut recuperer le fichier, et on ne met pas plus de sécurité (c'est un risque ASSUMÉ : si la personne recoit le mail, elle a deja des infos qui pourrait nécessité un accès au site si on lui envoyait pas l'email, à savoir le contenu de la réponse, donc EN soit il n'y a pas de raison de protéger plus les fichiers que les autres champs)
$pass : ici c'est le secret du site, et vu qu'il est hashé, il reste secret
$alea : on demande l'alea_ephemere :
je pense que c'est parce que j'avais copié sur d'autres fonctions de securisation d'action POUR DES AUTEURS CONNECTÉS
mais en fait par définion on veut un truc qui dure (vu qu'on gère autrement le caractère éphèmère, via _FORMIDABLE_EXPIRATION_FICHIERS_EMAIL)
du coup en fait un il faut un alea pas ephemère, et donc le secret du site irait très bien, je pense.
Et donc pour conclure :
dans tous les appels à _action_auteur() remplacer 'alea_ephemere' par 'secret_du_site' (ou éventuellement garder dans la fonction de decode la possibilité d'utiliser l'alea_ephemere, si jamais on veut maintenir une compatibilité, mais vu que notre truc ne marche que le temps d'un ephemère, on pourrait dire qu'on assume et qu'on casse tout)
on assume avec cela :
le fait qu'il NECESSAIRE d'avoir le lien pour accéder au fichier (aka : on ne peut pas le recuperer en allant chercher directement dans config/formidable/etc)
le fait qu'il est SUFFISANT d'avoir le lien pour accéder au fichier (AKA : on ne demande pas à s'authentifier)
Voilà. Je crois ne pas m'être gouré dans mon raisonnement, mais je suis un peu HS, donc un tier avis est le bienvenu :)
théoriquement, puisque l'url contient les infos sur le chemin du fichier + le hash lequel se base sur info chemin de fichier + secret du site, une personne avec l'url pourrait tester toutes les combinaisons pour retrouver le secret du site.
cela étant le secret du site c'est un hash de 2^256 donc il faudrait faire une grosse attaque par force brut... si j'en crois différent site, actuellement on considère que, sans ordinateur quantique, c'est deja très bon
Si vraiment on veut faire ceinture et bretelle, on peut ajouter un secret_de_formidable qui utilise le même mecanisme de generation que secret_du_site() et la on aurait 2^1024... mais franchement est-ce qu'on veut se complexifier la tache ?
Effectivement, le but étant qu'une personne qui a le lien puisse télécharger le fichier, secret_du_site devrait suffire, d'autant que c'est limité dans le temps par la constante, donc pour moi suffisemment sécurisé.
la plus gros risque serait de permettre de trouver le secret_du_site en fait. Si vraiment on veut un truc expirable dans le temps au niveau du hash, bah alors il faut qu'on se crée un alea a date d'expiration conformément au délai.
oui bien sur. Mais justement comme j'expliquais la question est de savoir si on ouvre potentiellement une ouverture au secret du site.
Et ma réponse est : oui, mais moyennant beaucoup de calcul. On ne transmet en effet pas le secret du site, mais :
une information non chiffrée
la même information chiffrée AVEC le secret du site.
Donc là potentiellement si une personne s'amuse à tester toutes les valeurs possibles du secret du site, il peut vérifier à quelle moment cela match.
Mais bon, c'est comme tjr en crypto : une question de temps et d'energie. Et si j'en crois ce que je lis, on aurait cramé la terre avant d'avoir reussi à casser par force brute.
LA solution pour s'assurer que même avec un temps infini la personne ne puisse pas trouver l'action auteur, c'est d'utiliser autre chose que le secret du site pour chiffrer ; et si possible une clé qui ne sert pas longtemps, genre un alea ephemere. Ce qui est le cas actuellement.
Mais encore une fois je ne suis pas hyper spécialisée la dedans..