JeuWeb - Crée ton jeu par navigateur
Système de Tokens - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Système de Tokens (/showthread.php?tid=7571)



Système de Tokens - MeTaLLiQuE - 17-01-2016

Bonjour,

Je suis en train de réfléchir à mettre en place un système de Tokens pour l'ensemble des scripts que possède mon jeu.

Cependant, j'ai deux idées je ne sais laquelle choisir (même si j'ai un penchant vers la seconde solution).

J'avais pensé dans un premier cas, un token qui serait généré pour tout le site. Tous les formulaires auraient le même token.

Dans un second cas, un token par formulaire. Chaque formulaire aurait son propre token ce qui permet, à mon avis d'accroître la sécurité.

Quelle solution avez-vous opté pour votre site ? Avez-vous trouvé d'autres alternatives ? Des couches de sécurité supplémentaire ? Quelle durée avez-vous attribué à votre token avant qu'un autre soit automatiquement généré ?

Cordialement,


RE: Système de Tokens - MadMass - 17-01-2016

Quel est le but de ce système précisément ? S'assurer que c'est bien le formulaire qui est utilisé et pas autre chose ?


RE: Système de Tokens - Xenos - 17-01-2016

Salut,

si c'est anti-CSRF, le but est de rendre le formulaire imprévisible, donc impossible d'utiliser un seul token pour tout le site et tout le monde. A la rigueur, un seul token par joueur pour tout le site, c'est à voir... Mais niveau sécurité, mieux vaut lui attribuer une date d'expiration.
En tous cas, le token doit être différent d'un utilisateur à l'autre (sinon, le pirate s'inscrit, récupère le token, et l'intègre à ses requêtes CSRF ce qui ne sert donc à rien).

Consulte les bibliothèques anti-CSRF (Symphony doit en avoir une) pour les infos type durée d'expiration: tu les trouveras surement dans les paramètres de configuration de ces libs.

Il existe aussi un autre mécanisme anti-CSRF, basé sur des headers HTTP standards, mais je ne m'en rappelle plus de tête. Tu les trouveras sur En fait, il n'y est pas, mais je te conseille de faire le tour de la Cheat Sheet CSRF de l'OWASP.

[Edit] Autant mettre le lien...

A propos, j'aime bien le Double Submit Cookie, qui évite de stocker un token anti-CSRF coté serveur.
Sinon, il y a le Referer HTTP qui peut convenir, avec un fallback si besoin sur un formulaire à token (ainsi, on gère 80% des cas avec simplement le Referer, et on a un seul formulaire avec token, celui de fallback)


RE: Système de Tokens - Talus - 21-05-2016

petit cadeau, voici un script qui peut générer des Token aléatoire et les valider, c'est relativement simple, et ça marche
ça se base sur le principe du MD5 + salt, mais en circuit ferme

après comme l'a dit Xenos, il faudrait que tu stock chaque token pour a la fois savoir si il on été utiliser mais aussi pour le donner un date de validité

Code PHP :
<?php 
   
function rand_alphanumeric() {

        $subsets[0] = array('min' => 48, 'max' => 57); // ascii digits
        $subsets[1] = array('min' => 65, 'max' => 90); // ascii uppercase English letters
        $subsets[2] = array('min' => 97, 'max' => 122); // ascii lowercase English letters

        // random choice between lowercase, uppercase, and digits
        $s = rand(0, 2);
        $ascii_code = rand($subsets[$s]['min'], $subsets[$s]['max']);
        return chr($ascii_code);
    }
    
   
function generate_token($SECRET) {
        $str = "";
        for ($i = 0; $i < 8; $i++)
            $str .= Self::rand_alphanumeric();
        return $str . strtoupper(sha1($str . $SECRET));
    }

    function validate_token($TOKEN, $SECRET) {
        $str = substr($TOKEN, 0, 8);

        if ($TOKEN === ($str . strtoupper(sha1($str . $SECRET))))
            return true;
        return false;
    }