【问题标题】:PHP Tokens for Forms and Authentication用于表单和身份验证的 PHP 令牌
【发布时间】:2012-02-21 07:09:49
【问题描述】:

我有一个关于令牌的问题。我知道它们是用于安全目的的随机字符,但它们是如何工作的以及它们保护什么?

【问题讨论】:

标签: php function authentication md5 token


【解决方案1】:

身份验证机制在表单显示时创建一个令牌,并将其存储在服务器端。 身份验证机制还将令牌作为隐藏输入添加到表单中。当您发送它时,验证系统检查它是否在服务器端存储中。 如果找到令牌,身份验证过程将继续,令牌正在删除。

它可以防止垃圾邮件表单操作脚本。

使用注销 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 参数传递时会怎样。它是如何工作的?
  • 用于验证请求的令牌。它可以在服务器端创建,也可以从请求参数创建。但是,如果您想要良好的保护,您应该向其他人隐藏令牌生成机制。它可以通过服务器可以读取的任何方式传递。
  • 那么你能告诉我一个例子,说明当它用作 url 参数时它是如何工作的。示例:example.com/logout.php?hash=6556jhntrh67&logout=true
猜你喜欢
  • 2016-01-29
  • 2018-06-08
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2016-02-22
  • 1970-01-01
  • 2014-03-26
相关资源
最近更新 更多