Maison > développement back-end > tutoriel php > PHP Master | Générer des URL d'utilisation unique

PHP Master | Générer des URL d'utilisation unique

Joseph Gordon-Levitt
Libérer: 2025-02-24 10:30:11
original
244 Les gens l'ont consulté

PHP Master | Generating One-Time Use URLs

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:

  • Génération de jetons sécurisée: Tirez parti des fonctions PHP sha1() et uniqid() pour créer des jetons imprévisibles et uniques pour chaque OTU, minimisant le risque de collisions.
  • Suivi de la base de données: Stockez le jeton, le nom d'utilisateur et l'horodatage dans une base de données pour gérer l'utilisation et la validité de l'OTU.
  • Vérification et invalidation des jetons: Un script de traitement vérifie le jeton par rapport à la base de données, effectue l'action prévue (par exemple, l'activation du compte) et invalide immédiatement le jeton pour éviter la réutilisation.
  • Time-to-Live (TTL): Implémentez un TTL (par exemple, 24 heures) pour expirer automatiquement OTUS, améliorant la sécurité.

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)
);
Copier après la connexion

Génération de jetons (PHP):

<?php
$token = sha1(uniqid($username, true));
?>
Copier après la connexion

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"]));
?>
Copier après la connexion

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";
?>
Copier après la connexion

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);
?>
Copier après la connexion

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));
?>
Copier après la connexion

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...
?>
Copier après la connexion

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!

Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal