Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于表单和身份验证的PHP令牌_Php_Function_Authentication_Md5_Token - Fatal编程技术网

用于表单和身份验证的PHP令牌

用于表单和身份验证的PHP令牌,php,function,authentication,md5,token,Php,Function,Authentication,Md5,Token,我有一个关于代币的问题。我知道它们是出于安全目的而使用的随机字符,但它们是如何工作的以及它们可以防止什么?身份验证机制在显示表单时创建一个令牌,并将其存储在服务器端。 此外,身份验证机制将令牌作为隐藏输入添加到表单中。发送时,验证系统会检查它是否在服务器端存储中。 如果找到令牌,身份验证过程将继续,并且令牌正在删除 它可以防止来自动作脚本的垃圾邮件 与注销url一起使用的示例: <?php // Generate token $logout_token = md5(microtime()

我有一个关于代币的问题。我知道它们是出于安全目的而使用的随机字符,但它们是如何工作的以及它们可以防止什么?

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

它可以防止来自动作脚本的垃圾邮件

与注销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>

添加令牌是为了保护跨站点请求伪造,而且这不是攻击的唯一方式,还有sql注入、XSS、,。还有一个php实现,您可以给我展示一个php中的令牌示例,以及如何使用它们吗?当令牌作为URL参数传递时会怎么样。如何工作?用于验证请求的令牌。它可以在服务器端创建,也可以从请求参数创建。但如果您想要良好的保护,您应该对其他人隐藏令牌生成机制。它可以通过服务器可以读取的任何方式传递。所以,您可以给我一个例子,说明当它用作url参数时,它是如何工作的。例子:
<?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.";
}