Maison >développement back-end >tutoriel php >Comment mettre en œuvre un système occasionnel pour sauvegarder l'intégrité du site Web et éviter la duplication des demandes ?

Comment mettre en œuvre un système occasionnel pour sauvegarder l'intégrité du site Web et éviter la duplication des demandes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 11:24:02304parcourir

How can a nonce system be implemented to safeguard website integrity and prevent request duplication?

Mise en œuvre d'un système de notation pour protéger l'intégrité du site Web

Problème :

Le système de notation d'un site Web, qui utilise le hachage pour garantir L'intégrité des requêtes HTTP est exploitée via la duplication de requêtes. Les attaquants obtiennent des scores élevés et reproduisent les détails de la demande pour manipuler le système.

Solution nonce :

Pour lutter contre cette attaque, il est prudent de mettre en œuvre un système nonce. Les noms occasionnels (numéro utilisé une fois) fournissent une valeur unique pour chaque demande, empêchant la réutilisation de la même demande.

Moyen commun et sécurisé de configurer un système de noms occasionnels :

Fonctions côté serveur :

  • getNonce() : génère un nom occasionnel, le stocke dans une base de données et le renvoie au client.
  • verifyNonce( $data, $cnonce, $hash) : récupère le nom occasionnel stocké, le compare au nom occasionnel et au hachage fournis par le client et valide la demande.

Fonctions côté client :

  • sendData($data) : génère un nom occasionnel client aléatoire, construit un hachage et envoie les données, le nom occasionnel client et le hachage au serveur pour validation.

Détails de mise en œuvre :

  • La fonction makeRandomString() crée des chaînes ou des nombres aléatoires sécurisés.
  • La fonction de hachage utilisée à la fois côté client et côté serveur. le code latéral doit correspondre.
  • Pour éviter la réutilisation du nom occasionnel, il est crucial de supprimer le nom occasionnel de la base de données après une validation réussie.
  • Le serveur doit identifier chaque demande pour identifier et stocker le nom occasionnel de manière appropriée.
🎜>

Exemple de système de nonce :

// Server-Side
getNonce() {
    $id = identifyRequest();
    $nonce = hash('sha512', makeRandomString());
    storeNonce($id, $nonce);
    return $nonce;
}

verifyNonce($data, $cnonce, $hash) {
    $id = identifyRequest();
    $nonce = getNonce($id);
    removeNonce($id, $nonce);
    $testHash = hash('sha512', $nonce . $cnonce . $data);
    return $testHash == $hash;
}

// Client-Side
sendData($data) {
    $nonce = getNonceFromServer();
    $cnonce = hash('sha512', makeRandomString());
    $hash = hash('sha512', $nonce . $cnonce . $data);
    $args = ['data' => $data, 'cnonce' => $cnonce, 'hash' => $hash];
    sendDataToClient($args);
}

En mettant en œuvre ce système de nonce, le site Web peut efficacement empêcher la duplication des demandes et maintenir l'intégrité du système de notation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn