0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IT業界25年目】ADHDポンコツ鬱エンジニアが人生賭けて運営中の求人サービス『ヴェテラン』でも使用した『PHP』のトークンについて

0
Posted at

皆さんこんにちは!

今日は台風の影響も無くなり比較的過ごしやすいですね!ポンコツエンジニアのGONです。

千葉で記録的な豪雨により被害が出ていますが皆さん大丈夫でしょうか。

来週から記録的な暑さになるみたいな予報もあるので気を付けていきましょう。

前回までに人生賭けた求人サービスを構築するために『PHP』『postgreSQL』『AWS』を選んだ理由や、

サービス名の由来、求職者様向け&企業様向け機能のご紹介、面談の採用確率UP方法、

『PHP』『postgreSQL』『AWS』の実機練習用サイトをご紹介させていただき、

さらに『SQL』『PHP』『AWS』の基本的な操作方法とセキュリティについて書かせていただきました。

今日は『PHP』のセキュリティ編第二弾としてトークンについて書かせていただきます。

PHPのセキュリティでは、用途によってトークンが違います。

トークン 用途
CSRFトークン 不正なフォーム送信を防ぐ
セッションID ログイン状態を識別する
パスワードリセットトークン パスワード再設定
メール認証トークン メールアドレス確認
APIトークン APIへのアクセス認証

PHPでいう「トークン」は、ユーザーが正規のページから送信したリクエストか

確認するためのランダムな秘密値として使うことが多いです。

特に重要なのが CSRFトークンです。


1. トークンを生成

session_start();

if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

random_bytes(32)で予測困難な値を作ります。
2. フォームに埋め込む

<input type="hidden"
       name="csrf_token"
       value="<?= htmlspecialchars(
           $_SESSION['csrf_token'],
           ENT_QUOTES,
           'UTF-8'
       ) ?>">

<input type="text" name="name">

<button type="submit">保存</button>
``` ブラウザからは、

csrf_token = ランダムな文字列

が一緒に送られます。
3. サーバー側で確認
update.phpでは、

session_start();

$token = $_POST['csrf_token'] ?? '';

if (
    empty($_SESSION['csrf_token']) ||
    !hash_equals($_SESSION['csrf_token'], $token)
) {
    http_response_code(403);
    exit('不正なリクエストです');
}

とします。

これで、

正しいトークン
    ↓
処理を実行

間違ったトークン
    ↓
403 Forbidden

となります。


なぜトークンが必要?

例えば攻撃者が、

のようなフォームを作ってユーザーに踏ませても、攻撃者は正規サイトのCSRFトークンを知りません。

そのため、

攻撃者
 ↓
不正なPOST
 ↓
csrf_token がない / 間違っている
 ↓
サーバーが拒否

となります。

基礎的はありますが、トークンの重要性を分かっていただけましたでしょうか。

これらを考慮して構築した求人サービスは以下になります。

企業の方、エンジニアの方に使っていただけると非常に喜びます。

 ▼求人マッチングサービス【ヴェテラン】
  https://veteran-work.com/

「トークンって何?Cookieと何が違うの?」

など質問やご質問いただけまいたら喜んで答えさせていただきます。

本日もありがとうございました。

明日も頑張りましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?