PHP токены для форм и аутентификации - PullRequest
0 голосов
/ 21 февраля 2012

У меня вопрос по токенам. Я понимаю, что это случайные символы, используемые в целях безопасности, но как они работают и от чего защищаются?

1 Ответ

1 голос
/ 21 февраля 2012

Механизм аутентификации создает токен при отображении формы и сохраняет его на стороне сервера. Также механизм авторизации добавляет токен в качестве скрытого ввода в форму. Когда вы отправляете его, система проверки подлинности проверяет, хранится ли она на сервере Если токен найден, процесс аутентификации продолжится и токен будет удален.

Защищает от спама форму действий скрипта.

Пример использования с 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.";
}
...