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
Joseph Gordon-Levittoriginal
2025-02-24 10:30:11247parcourir

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:

<code class="language-sql">CREATE TABLE pending_users (
    token CHAR(40) NOT NULL,
    username VARCHAR(45) NOT NULL,
    tstamp INTEGER UNSIGNED NOT NULL,
    PRIMARY KEY(token)
);</code>

Génération de jetons (PHP):

<code class="language-php"><?php
$token = sha1(uniqid($username, true));
?></code>

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):

<code class="language-php"><?php
$query = $db->prepare("INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)");
$query->execute(array($username, $token, $_SERVER["REQUEST_TIME"]));
?></code>

Le jeton, le nom d'utilisateur et l'horodatage sont stockés pour une vérification ultérieure.

Construction URL (PHP):

<code class="language-php"><?php
$url = "http://example.com/activate.php?token=$token";
?></code>

cela crée l'Otu.

Notification par e-mail (PHP):

<code class="language-php"><?php
$message = "Thank you for signing up! Activate your account: $url";
mail($address, "Account Activation", $message);
?></code>

L'OTU est envoyé à l'utilisateur par e-mail.

Traitement de l'URL unique (activate.php):

Ce script vérifie et traite l'OTU:

<code class="language-php"><?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));
?></code>

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:

<code class="language-php"><?php
$delta = 86400; // 24 hours in seconds
if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) { throw new Exception("Token expired."); }
// ...rest of the code...
?></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!

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