2012-02-21 117 views
0

我有一個關於令牌的問題。我知道它們是用於安全目的的隨機字符,但它們是如何工作的以及它們能抵禦什麼?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

回答

1

身份驗證機制在表單顯示時創建一個令牌,並將其存儲在服務器端。 另外,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