我有一个关于令牌的问题。我知道它们是用于安全目的的随机字符,但它们是如何工作的,它们能防止什么?
身份验证机制在显示表单时创建一个令牌,并将其存储在服务器端。身份验证机制还将令牌作为隐藏输入添加到表单中。当您发送它时,身份验证系统会检查它是否在服务器端存储中。如果找到令牌,身份验证过程将继续,并且已删除令牌。
它可以防止垃圾邮件形式的动作脚本。
与注销url一起使用的示例:
<?php
// Generate token
$logout_token = md5(microtime().random(100, 999));
session_start();
// Store token in session
if (!is_array($_SESSION['logout_tokens']) {
$_SESSION['logout_tokens'] = array();
}
$_SESSION['logout_tokens'][] = $logout_token;
?>
<a href="/logout/?logout_token=<?= $logout_token ?>">logout</a>
处理注销的脚本:
<?php
$done = false;
if (!empty($_GET['logout_token'])) {
// Get token from url
$logout_token = $_GET['logout_token'];
session_start();
if (!is_array($_SESSION['logout_tokens']) {
$_SESSION['logout_tokens'] = array();
}
// Search get token in session (server-side storage)
if (($key = array_search($logout_token, $_SESSION['logout_tokens'], true)) !== false) {
// Remove used token from storage
unset($_SESSION['logout_tokens'][$key]);
// Do logout
$done = true;
}
}
if ($done === false) {
echo "Something went wrong.";
}