Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:ext:csrf

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:ext:csrf [2020/05/24 14:38]
y2sunlight [CSRF対策の設定]
apricot:ext:csrf [2020/06/08 11:16] (現在)
tanaka [ミドルウェア]
行 1: 行 1:
->編集中 
- 
------ 
- 
 ====== Apricot CSRF対策 ====== ====== Apricot CSRF対策 ======
  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-15//  --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-15//
行 37: 行 33:
 |static\\ generate()|セッション内のCSRFトークンが未生成の場合、生成してセッションに格納します。| |static\\ generate()|セッション内のCSRFトークンが未生成の場合、生成してセッションに格納します。|
  
-これらのメソッドは[[#ミドルウェア|ミドルウェア]]で使用することを想定しています。HTMLに埋め込むCSRFトークンはセッションから取得して下さい(後述の[[#BladeOneのカスタマイズ|BladeOneのカスタマイズ|]]を参照)。+これらのメソッドは[[#ミドルウェア|ミドルウェア]]で使用することを想定しています。HTMLに埋め込むCSRFトークンはセッションから取得して下さい(後述の[[#BladeOneのカスタマイズ|BladeOneのカスタマイズ]]を参照)。
  
 CsrfTokenクラスを以下に示します。 CsrfTokenクラスを以下に示します。
  
-{{fa>folder-open-o}} ** /apricot/core/Security/ **+{{fa>folder-open-o}} ** /apricot/core/Foundation/Security **
 <code php CsrfToken.php> <code php CsrfToken.php>
 <?php <?php
行 117: 行 113:
  
 {{fa>folder-open-o}} ** /apricot/app/Middleware ** {{fa>folder-open-o}} ** /apricot/app/Middleware **
-<code php CsrfToken.php>+<code php VerifyCsrfToken.php>
 <?php <?php
 namespace App\Middleware; namespace App\Middleware;
行 239: 行 235:
  
 ===== HTMLテンプレートの修正 ===== ===== HTMLテンプレートの修正 =====
 +
 +これまでに作成したフォーム画面のHTMLテンプレートを修正し、@csrfディレクティブを追加します。
 +
 +==== ユーザ登録画面 ====
 +
 +ユーザ登録の新規登録画面と編集画面のテンプレートを修正します。
 +
 +=== 新規登録画面のテンプレート ===
 +
 +{{fa>folder-open-o}} ** /apricot/assets/views/user **
 +<code php create.blade.php>
 +{{-- コンテンツ --}}
 +@section('content')
 +    <form method="POST" name="fm">
 +        @csrf
 +        ...
 +    </form>
 +@endsection
 +</code>
 +
 +  * ''form'' タグの下に ''@csrf'' を追加します。
 +
 +=== 編集画面のテンプレート ===
 +
 +{{fa>folder-open-o}} ** /apricot/assets/views/user **
 +<code php edit.blade.php>
 +{{-- コンテンツ --}}
 +@section('content')
 +    <form method="POST" name="fm">
 +        @csrf
 +        ...
 +    </form>
 +@endsection
 +</code>
 +
 +  * ''form'' タグの下に ''@csrf'' を追加します。
  
 \\ \\
  
 ===== テスト実行 ===== ===== テスト実行 =====
 +
 +CSRF対策のテストをしてみましょう。Apricotのユーザ編集画面にアクセスします。
 +
 +[{{apricot:ext:ext01.png?nolink}}]
 +■ [保存]ボタンを押して下さい。 
 +
 +
 +[{{apricot:ext:ext02.png?nolink}}]
 +■ 正常に保存できます。\\ 
 +■ 先に修正したユーザ編集画面の ''@csrf'' ディレクティブをコメントにして下さい。 
 +
 +<div indent 60%>
 +{{fa>folder-open-o}} ** /apricot/assets/views/user **
 +<code php create.blade.php>
 +....
 +    <form method="POST" name="fm">
 +        {{--@csrf --}}
 +        ...
 +    </form>
 +....
 +</code>
 +</div>
 +
 +■ ユーザ編集画面で再び[保存]ボタンを押すと次の画面が出ます。
 +
 +[{{apricot:ext:ext03.png?nolink}}]
 +■ ''VerifyCsrfToken Error'' のメッセージと共にWhoopsのエラー画面が出力されます。\\ 
 +■ これは CSRFトークンがサーバーに送信されていないので発生する例外です。\\
 +■ 尚、本番用のエラー画面を出力したい場合は、.env の ''APP_DEBUG'' をfalseに設定してからテストして下さい。
 +
 +<div indent 60%>
 +<code ini .env>
 +....
 +APP_DEBUG=false
 +....
 +</code>
 +</div>
 +
 +テスト後は、''@csrf'' や ''APP_DEBUG'' を元に戻しておいて下さい。
  
 \\ \\
apricot/ext/csrf.1590298733.txt.gz · 最終更新: 2020/05/24 14:38 by y2sunlight