URL unique: adresses Web sécurisées et à usage unique
Une URL unique (OTU) est une adresse Web temporaire conçue pour une utilisation unique. Ceci est idéal pour un accès sécurisé aux fichiers ou aux ressources, souvent utilisés dans des scénarios tels que la vérification du compte ou l'accès à durée limitée. Cet article détaille la génération, la mise en œuvre et l'expiration de l'OTU à l'aide de Php.
Concepts clés:
sha1()
et uniqid()
pour créer des jetons imprévisibles et uniques pour chaque OTU, minimisant le risque de collisions. Création d'une URL unique:
Imaginez un système d'enregistrement des utilisateurs. Après l'inscription, un e-mail de confirmation contenant un OTU est envoyé pour activer le compte. Le format OTU serait: http://example.com/activate?token=ee97780...
Tableau de base de données:
Les informations OTU sont stockées dans une table de base de données:
CREATE TABLE pending_users ( token CHAR(40) NOT NULL, username VARCHAR(45) NOT NULL, tstamp INTEGER UNSIGNED NOT NULL, PRIMARY KEY(token) );
Génération de jetons (PHP):
<?php $token = sha1(uniqid($username, true)); ?>
uniqid()
génère un identifiant unique, et sha1()
le hache en une chaîne de 40 caractères pour le jeton.
Insertion de la base de données (PHP):
<?php $query = $db->prepare("INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)"); $query->execute(array($username, $token, $_SERVER["REQUEST_TIME"])); ?>
Le jeton, le nom d'utilisateur et l'horodatage sont stockés pour une vérification ultérieure.
Construction URL (PHP):
<?php $url = "http://example.com/activate.php?token=$token"; ?>
cela crée l'Otu.
Notification par e-mail (PHP):
<?php $message = "Thank you for signing up! Activate your account: $url"; mail($address, "Account Activation", $message); ?>
L'OTU est envoyé à l'utilisateur par e-mail.
Traitement de l'URL unique (activate.php):
Ce script vérifie et traite l'OTU:
<?php // Retrieve token $token = isset($_GET["token"]) && preg_match('/^[0-9A-F]{40}$/i', $_GET["token"]) ? $_GET["token"] : throw new Exception("Invalid token."); // Verify token $query = $db->prepare("SELECT username, tstamp FROM pending_users WHERE token = ?"); $query->execute(array($token)); $row = $query->fetch(PDO::FETCH_ASSOC); $query->closeCursor(); if (!$row) { throw new Exception("Invalid token."); } extract($row); // Account activation logic... // Delete token $query = $db->prepare("DELETE FROM pending_users WHERE username = ? AND token = ? AND tstamp = ?"); $query->execute(array($username, $token, $tstamp)); ?>
Ce script récupère le jeton, le vérifie par rapport à la base de données, effectue l'activation du compte, puis supprime le jeton pour éviter la réutilisation.
ajoutant un TTL:
<?php $delta = 86400; // 24 hours in seconds if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) { throw new Exception("Token expired."); } // ...rest of the code... ?>
Cela ajoute une vérification d'expiration de 24 heures.
Conclusion:
Les URL uniques fournissent un mécanisme robuste pour un accès sécurisé à usage unique. Cette approche, combinée à une bonne gestion de la base de données et aux pratiques de sécurité, assure un système sécurisé et fiable. N'oubliez pas d'implémenter la gestion des erreurs et la désinfection des entrées pour une solution prête pour la production. Envisagez d'ajouter un script de nettoyage pour supprimer périodiquement les jetons expirés de la base de données.
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!