【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();
}
// ここでユーザーから受信したデータをファイルやデータベースに書き込む処理を行う