Forum Programmation.php TOTP facile et souverain (sans GAFAM) → quelle lib ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
4
14
sept.
2022

Bonjour,

Je cherche à sécuriser un site web avec TOTP.

Je proposerai aux utilisateurs d’installer Aegis sur leur téléphone.

La génération des clés et du qrcode, à la limite je peux gérer ça en ligne de commande si nécessaire. Je n’ai pas l’ambition de proposer une interface web "complète".

PS: Une piste, 2FA QR Code Generatorcode, sérieuse et libre ?

Par contre, en PHP, je dois pouvoir vérifier le TOTP…

Mon site web est en PHP et "autonome souverain", je n’utilise pas de trucs externes (GAFAM, etc.).

Pourriez-vous me conseiller un lib facile et efficace à utiliser en PHP pour faire ça ?

Merci d’avance.

  • # Spomky-Labs / otphp

    Posté par  (site web personnel) . Évalué à 4.

    https://github.com/spomky-labs/otphp
    et si tu utilises Symfony : https://symfony.com/bundles/SchebTwoFactorBundle/current/index.html

    Pas essayé par moi même par contre. Donc pas d'avis.

    Jérôme.

  • # KD2/Security_OTP

    Posté par  (site web personnel, Mastodon) . Évalué à 10.

    Hello,

    c'est assez simple à coder.

    tu peux utiliser cette lib que j'ai codé pour Garradin :

    https://fossil.kd2.org/kd2fw/file?name=src/lib/KD2/Security_OTP.php&ci=tip

    Générer un code :

    echo KD2\Security_OTP::TOTP('SECRET');
    

    Vérifier un code :

    if (KD2\Security_OTP::TOTP('SECRET', 123456)) {
      echo "Code bon";
    }
    

    Les codes TOTP étant valides 30 secondes, par défaut la fonction TOTP autorise un "drift" (décalage temporel) de plus ou moins un segment de 30 secondes, pour gérer les cas de genre tu viens de lire le code sur ton téléphone, mais il expire 2 secondes plus tard, ben on l'accepte quand même. Donc on accepte par défaut un drift de +/- 1 segment de 30 secondes : on accepte le code des 30 secondes actuelles, le code des 30 secondes précédentes et le code des 30 secondes suivantes. C'est un poil moins sécurisé mais plus simple pour l'utilisateur. Tu peux changer ça avec l'argument drift.

    Attention à ce que ta machine soit à l'heure aussi. Le classe contient également une méthode pour demander l'heure à un serveur NTP (utile pour les gens qui s'auto-hébergent et qui ont parfois un serveur pas à l'heure).

    Il y a aussi une classe pour générer un QRCode en SVG :

    https://fossil.kd2.org/kd2fw/file?name=src/lib/KD2/Graphics/QRCode.php&ci=tip

    Ainsi tu peux générer un QR code simplement pour que les gens l'ajoutent au téléphone :

    use KD2\Security_OTP as OTP;
    use KD2\Graphics\QRCode;
    
    $secret = OTP::getRandomSecret();
    $url = OTP::getOTPAuthURL('Mon super site web', $secret);
    
    $qrcode = new QRCode($url);
    $qrcode_img = 'data:image/svg+xml;base64,' . base64_encode($qrcode->toSVG());
    
    printf('<h2>Votre code secret est : %s</h2>', $secret);
    printf('<img src="%s" alt="QRcode" />', $qrcode_img);
    

    C'est autonome, souverain, et ça marche sur Garradin :)

    « Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)

  • # Autre option coté Téléphone

    Posté par  . Évalué à 7.

    Salut,

    Tu as aussi FreeOTP, libre en licence Apache, coté appli téléphone qui propose une version d'appli android et apple.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.