Comment sécuriser les requêtes Web avec des noms occasionnels
Problème
Un utilisateur a trouvé un moyen d'exploiter le système de validation des requêtes du système de notation d'un site Web en dupliquer des requêtes HTTP de grande valeur. Cela compromet l'intégrité et la fiabilité du système.
Solution : Implémentation d'un système de nonce
Les nonces (nombre utilisé une fois) sont des valeurs qui empêchent les attaques par réexécution de requête en garantissant qu'une requête particulière n'a pas été faite auparavant. Voici un moyen courant et sécurisé d'implémenter un système de noms occasionnels :
Génération et vérification de noms occasionnels côté serveur
Fonction getNonce()
- Identifie le client qui fait la demande (par exemple, par nom d'utilisateur, session).
- Génère un nom occasionnel aléatoire à l'aide d'une fonction de hachage sécurisée. (par exemple, SHA512).
- Stocke le nom occasionnel dans une base de données associée à l'ID du client.
- Renvoie le nom occasionnel au client.
verifyNonce () Function
- Récupère le nom occasionnel précédemment stocké pour le client ID.
- Supprime le nom occasionnel de la base de données (pour empêcher sa réutilisation).
- Génère un hachage avec le nom occasionnel fourni par le client (cnonce), les données de la demande et un sel secret .
- Compare le hachage généré au hachage fourni par le client.
- Renvoie vrai si les hachages correspondent, indiquant un hachage valide nonce.
Utilisation du nonce côté client
sendData() Fonction
- Récupère le nonce du serveur à l'aide de getNonce ().
- Génère un nom occasionnel spécifique au client (cnonce) à l'aide d'un hachage sécurisé fonction.
- Concatène le nom occasionnel du serveur, le nom occasionnel du client et les données de la demande.
- Génère un hachage à partir de la valeur concaténée.
- Envoie la demande au serveur, y compris les données , cnonce et hash.
Sécurité Considérations
- Génération aléatoire de noms occasionnels : La fonction makeRandomString() doit générer des nombres aléatoires hautement imprévisibles pour améliorer la sécurité.
- Fonction de hachage sécurisé : Utilisez une fonction de hachage puissante comme SHA512 ou bcrypt pour le hachage non lié calculs.
- À usage unique par requête : Les noms occasionnels ne doivent être utilisés qu'une seule fois et supprimés du stockage pour empêcher les attaques par relecture.