Skip to content
Extraits de code Groupes Projets
  1. mars 05, 2022
  2. mars 04, 2022
  3. mars 03, 2022
    • RastaPopoulos's avatar
      Fix #5069 : quitter la fonction qui gère les variantes de critères de date... · 74bb32c1
      RastaPopoulos a rédigé
      Fix #5069 : quitter la fonction qui gère les variantes de critères de date parce qu'il n'y aurait pas de déclaration dans l'API objet ne doit se faire QUE quand il n'y a PAS de nom de champ directement donné dans le critère lui-même. S'il y a annee_nomprecis, mois_nomprecis, ça doit marcher même sans déclaration.
      74bb32c1
    • cerdic's avatar
      Robustesse des migrations : on ne genere pas le secret_des_auth tant qu'on... · b469db95
      cerdic a rédigé et marcimat's avatar marcimat a validé
      Robustesse des migrations : on ne genere pas le secret_des_auth tant qu'on n'est pas en mesure de faire un backup des cles dans la foulee :
      - il faut avoir le champ backup_cles en base (donc avoir fait la migration de base)
      - il faut etre sur le login d'un webmestre (donc sur son login *apres* migration de la base) => faut il invalider la session du webmestre qui upgrade pour le forcer a se reconnecter ?
      Le but est d'eviter de generer une cle et de commencer a chiffrer les password des utilisateurs alors qu'aucun webmestre n'a encore de backup, ce qui reviendrait a perdre les pass de tous ces utilisateurs si on perd le fichier cles.php
      b469db95
    • cerdic's avatar
      49ed7435
    • marcimat's avatar
      Sécurité des authentifications avec le secret du site (g0uZ) : · 20908f78
      marcimat a rédigé
      - la clé secret_du_site est partagée entre le disque et la base de données. Il faut les 2 pour le calculer (la clé secret_du_site, et la meta secret_du_site).
      - Si on demande à chiffrer avec autre chose qu’une clé de longueur adaptée (ie: générée par Chiffrement::keygen()), tel qu’un mot de passe, alors on passe dans sodium_crypto_pwhash(),
      qui est la fonction adaptée à ce cas, mais le coût est très élevé dans ce cas (temps / mémoire, même au minimum possible)
      - On s’arrange donc pour que le secret_du_site obtenu soit effectivement de la taille adaptée à la clé de chiffrement.
      20908f78
    • marcimat's avatar
      Suite de 23994e0b1 : Ne pas mettre de jeton d’url directement en bdd (cas de... · 62851442
      marcimat a rédigé
      Suite de 23994e0b1 : Ne pas mettre de jeton d’url directement en bdd (cas de l’inscription d’auteur ou du changement de mot de passe)
      
      On chiffre le jeton en base, mais on permet 2 choses
      
      - Pouvoir retrouver le jeton actuellement utilisé sur un auteur (déchiffrage possible) (Rastapopoulos)
      - On limite le nombre de déchiffrages à effectuer en ayant une partie publique du jeton en bdd, qui
      sert à filtrer les auteurs dont on veut vérifier les jetons (a priori 1 seul auteur à vérifier)
      
      Introduction d’une fonction auteur_lire_jeton($id_auteur, $autoInit = false), qui lit un jeton
      sans écraser le précédent utilisé (ce que fait auteur_attribuer_jeton())
      
      Notons que ces histoires de jeton mériteraient quelques améliorations
      
      - permettre l’expiration des jetons
      - permettre plusieurs jetons pour un même auteur directement
      62851442
    • marcimat's avatar
      Ne pas mettre de jeton d’url directement en bdd (cas de l’inscription d’auteur... · e2be9181
      marcimat a rédigé
      Ne pas mettre de jeton d’url directement en bdd (cas de l’inscription d’auteur ou du changement de mot de passe) : on le hash avant (g0uZ)
      e2be9181
    • marcimat's avatar
      Chiffrement plus poussé : pad / unpad du message + hash si password (g0uZ) · 5e27fb3c
      marcimat a rédigé
      - Utiliser sodium_pad et sodium_unpad sur le message à chiffrer
      - Hacher un password en sha256 dans le chiffrement s’il sert comme clé.
      C’est un compromis suffisant.
      5e27fb3c
    • marcimat's avatar
    • marcimat's avatar
      Éviter une notice sur erreur de mot de passe · a43d85f4
      marcimat a rédigé
      a43d85f4
    • marcimat's avatar
      Coding standard · e9b2b4bf
      marcimat a rédigé
      e9b2b4bf
    • marcimat's avatar
    • cerdic's avatar
      Gestion de l'installation : · 88fc960c
      cerdic a rédigé et marcimat's avatar marcimat a validé
      - il faut creer une cle des auth si besoin
      - on utilise la fonction auth_spip_modifier_pass() pour changer le pass du webmestre que l'on cree
      - si on a perdu le fichier config/cle.php on demande a ce que l'installation se fasse par un webmestre qui a un backup des cles, avec son mot de passe actuel - et on restaure les cles a l'installation
      88fc960c
    • cerdic's avatar
      Utiliser hash_hmac et hash_equals pour calculer et verifier les jetons... · 7f47d636
      cerdic a rédigé et marcimat's avatar marcimat a validé
      Utiliser hash_hmac et hash_equals pour calculer et verifier les jetons d'action - c'est un compromis entre rapidite et securite car utiliser les fonction hasher() et verifier() de Spip\Core\Chiffrer apporterait plus de secu sur ces hash, mais avec un prix performance important (~200ms pour calculer un hash et on peut en avoir N dans une page qui contient N formulaires)
      On rappelle que la securite des actions ne doit jamais reposer sur ces hash mais sur un appel a autoriser() pour verifier que l'auteur a bien le droit de faire l'action
      7f47d636
    • cerdic's avatar
      Plus d'alea a fournir dans informer_login() quel que soit le scenario · 40b0eecc
      cerdic a rédigé et marcimat's avatar marcimat a validé
      40b0eecc
    • cerdic's avatar
      Champ `backup_cles` sur spip_auteurs, et `secret_du_site` hors de spip_meta · b50a3ed1
      cerdic a rédigé et marcimat's avatar marcimat a validé
      Upgrade de base pour ajouter un champ `backup_cles` sur spip_auteurs qui
      permet aux webmestres de conserver une copie des cles
      
      Le secret_du_site est fourni via SpipCles et plus via spip_meta, il est
      supprime de la base (on le reinit au passage, mais c'est pas tres grave)
      b50a3ed1
    • cerdic's avatar
      Etre tres prudent sur la generation d'un nouveau secret_des_auth : cela ne... · 388c45cd
      cerdic a rédigé et marcimat's avatar marcimat a validé
      Etre tres prudent sur la generation d'un nouveau secret_des_auth : cela ne peut avoir lieu que si on a plus aucun backup d'aucun webmestre
      On ajoute une fonction auth_spip_initialiser_secret() en charge de ça qui fait toutes les verif, et on ajoute des logs circonstancies pour aider les webmestres perdus au cas ou
      
      Inutile de sauver les cles, c'est fait automatiquement si une nouvelle cle est generee
      388c45cd
    • marcimat's avatar
      Refactoring de Chiffrer en découppant en plus d’éléments · c31437f0
      marcimat a rédigé
      les différentes fonctionnalités. C’est mieux structuré.
      
      - Chiffrement gère chiffrer() / dechiffrer() / keygen() (génération d’une nouvelle clé)
      en s’appuyant sur Sodium, toujours présent dans PHP depuis PHP 7.2.
      On utilise une chifferement symétrique (comme avec openssl précédement),
      mais le code est simplifié car libsodium gère l’authentification du message et son salage.
      
      - Password gère verifier() et hacher() en utilisant password_hash donc,
      mais en retirant l’option 'salt' qui n’est plus utilisé par PHP > 8,
      et effectivement il vaut mieux ne pas le renseigner (PHP gère un salt tournant
      tout seul comme un grand). On s’en sert pour régénerer notre password haché en bdd.
      
      - Cles est un conteneur de clés (tableau nom => clé)
      
      - SpipClés gère les clés SPIP et utilisant Cles. Des fonctions backup() et restore() permettent de lire un backup chiffré
      
      J’ai mis l’attribut `#[\SensitiveParameter]` sur différents paramètres en passant,
      il devrait être actif à partir de PHP 8.2 pour dire de ne pas afficher la valeur
      dans les affichages de backtrace() par exemple, afin de ne pas divulguer
      malencontreusement certaines infos en debug.
      
      Également (Cerdic)
      
      - Sodium exige une cle de chiffrement exactement de la bonne longueur : adapter la cle fournir si besoin (cas du chiffrement du backup des cles avec le pass du user)
      - La regeneration des cles ne peut se faire que cle par cle : si on a perdu le fichier des cles, c'est OK de regenerer un secret_du_site a la volee pour pouvoir afficher un formulaire de login par exemple, mais on ne doit surtout pas regenerer un secret_des_auth qui invaliderait tous les mots de passe
      - Permettre d'avoir plusieurs instances de SpipCles avec des fichiers de cle differents. Peut etre utile pout les tests unitaires, ou pour faire de l'auth multi-sites (on cherche l'auteur dans plusieurs bases SPIP, chacune associee a un fichier de cle different)
      c31437f0
    • cerdic's avatar
      Issues #5059 #4927 #3824 et #2109 : on reforme la logique du login · 07642edd
      cerdic a rédigé et marcimat's avatar marcimat a validé
      - plus de hashage+sel cote client, car les algos js sont penibles a gerer et https est maintenant un standard de securite
      - cote serveur on utilise les fonction modernes de PHP pour la gestion des mots de passe (sel, poivre, hashage et verification)
      Encore une fois directement inspire du plugin chiffrer de g0uz https://git.spip.net/spip-contrib-extensions/chiffrer
      
      La classe Spip\Core\Chiffrer se charge de la gestion des cles secrètes (initialiser, lire, ecrire, sauvegarder, restaurer, chiffrer, dechiffrer et verifier le mot de passe d'un auteur)
      Directement insipiré du plugin Chiffrer de g0uZ https://git.spip.net/spip-contrib-extensions/chiffrer
      07642edd
  4. mars 02, 2022
  5. fév. 28, 2022
  6. fév. 27, 2022
  7. fév. 26, 2022
  8. fév. 24, 2022
  9. fév. 22, 2022
  10. fév. 20, 2022
Chargement en cours