PHP令牌的形式和认证
身份验证机制在表单显示时创建一个令牌,并将其存储在服务器端。 另外,auth机制将令牌作为隐藏输入添加到表单中。发送它时,auth系统检查是否在服务器端存储中。 如果发现令牌,认证过程将继续并且令牌被删除。
它可以防止垃圾邮件形式的动作脚本。
实施例与注销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.";
}
什么时候令牌作为URL参数传递?这是如何运作的? – 2012-02-21 07:28:13
用于验证请求的令牌。它可以在服务器端创建,也可以从请求参数创建。但是,如果你想得到很好的保护,你应该将令牌生成机制隐藏起来。 它可以通过服务器可以读取的任何方式进行传递。 – Electronick 2012-02-21 07:28:58
所以,你可以告诉我一个当它用作URL参数时如何工作的例子。示例:http://www.example.com/logout.php?hash=6556jhntrh67&logout=true – 2012-02-21 07:33:20
令牌被添加用于保护跨site_request_forgery,也这不仅是为了吸引有方式,存在是sql注入,XSS,http://en.wikipedia.org/wiki/Cross-site_request_forgery。另外一个PHP实现http://csrf.htmlpurifier.org/ – 2012-02-21 07:15:58
你能告诉我一个PHP中令牌的例子,以及它们如何使用? – 2012-02-21 07:24:05