PHP令牌的形式和认证

问题描述:

我有一个关于令牌的问题。我知道它们是用于安全目的的随机字符,但它们是如何工作的以及它们能抵御什么?PHP令牌的形式和认证

+0

令牌被添加用于保护跨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

+0

你能告诉我一个PHP中令牌的例子,以及它们如何使用? – 2012-02-21 07:24:05

身份验证机制在表单显示时创建一个令牌,并将其存储在服务器端。 另外,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."; 
} 
+0

什么时候令牌作为URL参数传递?这是如何运作的? – 2012-02-21 07:28:13

+0

用于验证请求的令牌。它可以在服务器端创建,也可以从请求参数创建。但是,如果你想得到很好的保护,你应该将令牌生成机制隐藏起来。 它可以通过服务器可以读取的任何方式进行传递。 – Electronick 2012-02-21 07:28:58

+0

所以,你可以告诉我一个当它用作URL参数时如何工作的例子。示例:http://www.example.com/logout.php?hash=6556jhntrh67&logout=true – 2012-02-21 07:33:20