Midari Create > webアプリケーション製品 > Wakarana > サンプルコード >

【Wakarana】ワンタイムトークンの生成と確認

Wakaranaで、CSRF(クロスサイトリクエストフォージェリ)対策のためにワンタイムトークン(nonce)の生成と確認を行うサンプルコードです。

wakaranaに限らず、webサービスではデータの書き込みを伴う処理の前にはCSRF対策としてユーザーに対するワンタイムトークンの割り当てと照合を行うことが推奨されています。

sample_1.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

$user = $wakarana->check();
if (!is_object($user)) {
    // ログインしていないユーザーにはワンタイムトークンを送信しない
    exit();
}

// トークンを生成(生成されたトークンは自動的にユーザーに割り当てられる)
$token = $user->create_one_time_token();

print '<form action="sample_2.php" method="post">';

// ここに、ユーザーに入力させるフォーム要素を配置

print '    <input type="hidden" name="token" value="'.$token.'">';
print '    <button type="submit">送信</button>';
print '</form>

sample_2.php

<?php
include "wakarana/main.php";

$wakarana = new wakarana();

// ログイン認証とトークン照合処理
$user = $wakarana->check();
if (!is_object($user) && isset($_POST["token"]) && $user->check_one_time_token($_POST["token"])) {
    // 不正なアクセスの場合
    exit();
}

// ここでユーザーから受信したデータをファイルやデータベースに書き込む処理を行う