2012-02-21 17 views
0

トークンに関する質問があります。セキュリティ上の目的でランダムな文字が使用されていることを理解していますが、どのように動作するのですか、保護するのは何ですか?フォームと認証用のPHPトークン

+0

、またこれが、attactするための唯一の方法ではありませんSQLインジェクション、XSS、http://en.wikipedia.org/wiki/Cross-site_request_forgeryです。また1つのPHP実装http://csrf.htmlpurifier.org/ –

+0

PHPでトークンの例とその使い方を教えてください。 –

答えて

1

認証メカニズムは、フォームが表示されたときにトークンを作成し、サーバー側に格納しました。 また、認証メカニズムはトークンをフォームの非表示入力として追加します。あなたがそれを送信すると、サーバー側のストレージで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> 

スクリプト、その処理ログアウト:トークンがクロスsite_request_forgeryを保護するために追加され

<?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パラメータとして渡されるときはどうでしょうか。それはどのように機能するのですか? –

+0

要求の検証に使用されるトークン。これは、サーバー側で作成することも、要求パラメーターから作成することもできます。しかし、あなたが良い保護をしたいなら、あなたはトークン生成メカニズムを他人から隠すべきです。 サーバーが読み取ることができる方法で渡すことができます。 – Electronick

+0

URLパラメータとして使用するときの動作例を教えてください。例:http://www.example.com/logout.php?hash=6556jhntrh67&logout=true –

関連する問題