2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【BladeOne】CSRF対策

Last updated at Posted at 2022-08-13

はじめに

Laravel感覚で途中まで実装できていましたが、CSRF対策のところで躓きました。
実装するのに少し時間がかかってしまいました。
同じように悩む方の参考になればと思います。

インストールがまだの方

下記記事を参考にしてください。

注意

追記 8月15日
「ログイン済み」であることが条件と記載しておりましたがそのような条件はありません。
注意の内容自体が間違った内容でした。
取り消し線で消させて頂きます。
注意自体が間違っているとは...本当にすみません...
下記内容は「厳密なCSRFの用語の定義」を満たしていません。
CSRFの前提条件として「ログイン済み」であることが条件のためです。
あくまでもサンプルソースであることのご理解願います。

結論

※注意:session_start();でセッションの処理を開始しておく必要があります。

  • CSRFトークンの送信側
form.php
<?php
require_once __DIR__."/vendor/autoload.php";
use eftec\bladeone\BladeOne;

// getCsrfToken内でsessionにtokenを格納しているため必要。
session_start();

// 読み込みを行いたいテンプレートパス記述
$views = __DIR__.'/views';
$cache = __DIR__.'/cache';
$blade = new BladeOne($views,$cache,BladeOne::MODE_AUTO);

// この記述がないとCSRFトークンのvalueがHTMLに出力されない。
$blade->getCsrfToken();

echo $blade->run("form");
form.blade.php
<form action="catch.php" method="POST">
  @csrf
  <button>送信</button>
</form>
  • CSRFトークンの受信側
catch.php
<?php
require_once __DIR__."/vendor/autoload.php";
use eftec\bladeone\BladeOne;

// csrfIsValid内でsessionからtokenを取得しているため必要。
session_start();

$blade = new BladeOne();
if($blade->csrfIsValid() !== true) var_dump("エラー");

参考文献

EFTEC/BladeOne

2
3
7

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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?