SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(14)
フォーム関連のモジュール/プラグイン

トランザクションを実現するコントローラモジュール、変数の値を成形するダンプモジュール

  • X ポスト
  • このエントリーをはてなブックマークに追加

フォームにまたがったトランザクション処理

 前回紹介した内容で、だいぶ本格的なフォーム処理が実現できるようになってきました。本記事で最初に紹介するのは、複数のフォームにまたがったトランザクション処理を実現するためのプラグインです。

 そもそも、なぜこのような仕組みが必要となるのでしょうか。Webアプリケーションは、HTTPの仕組み上ステートレスなアクセスとなるため、ユーザーの意図しないデータ登録を行うことも可能となります。これはセキュリティ上大きな問題となります。

 このようなセキュリティ攻撃は、Cross site request forgeries(CSRF)と呼ばれています。

 CSRF攻撃を防ぐためのCatalystのプラグインとして、以前はCatalyst::Plugin::RequestTokenが提供されていましたが、現在はCatalyst::Controller::RequestTokenとして公開されています。

 RequestTokenは、Tokenを複数のフォームにまたがって共有することで、一連のトランザクションであることを保証します。サーバー側でTokenを保存するために、RequestTokenモジュールでは以前紹介したCatalyst::Plugin::Sessionを使用します。

RequestTokenをインストール/設定する

 これまでの例と同様に、Catalyst::Controller::RequestTokenモジュールをインストールします。

[リスト3]Catalyst::Controller::RequestTokenのインストール
# perl -MCPAN -e 'install Catalyst::Controller::RequestToken'

 Catalyst::Controller::RequestTokenモジュールはプラグインでは無いため、アプリケーションモジュールへの登録は不要ですが、依存関係のあるCatalyst::Plugin::Sessionを使用するので、このプラグインの設定を行う必要があります。

 設定箇所は次のようになります。

[リスト4]Sessionプラグインの登録(FormSample2.pmの一部)
# 省略
use Catalyst qw/
  -Debug
  ConfigLoader
  Static::Simple
  Session
  Session::State::Cookie
  Session::Store::File
  FormValidator::Simple
  FillInForm
  Unicode::Encoding
/;

 プラグインとして登録しない代わりに、コントローラクラスをCatalyst::Controller::RequestTokenから派生させる必要があります。

フォームにまたがったトランザクション処理を実装する

 これまでの例と同様に、アクションを定義していきます。RequestTokenでは、一連の機能を実現するために2つのアクションが追加されています。

RequestTokenで追加されるアクション
アクション名 説明
Catalyst::Controller::RequestToken::Action::CreateToken Tokenを作成するアクション
Catalyst::Controller::RequestToken::Action::ValidateToken 渡されたTokenを検証するアクション

 RequestTokenの例として次のアクション、テンプレートを使用します。サンプルで追加するinputアクションでは、上記のCreateTokenとしての役割を果たすためのメソッドを呼び出しています。

RequestTokenの例で登場するアクション、テンプレートなどのファイル
種類 説明
inputアクション 入力チェックを行うアクション
completeアクション 実際に登録処理を行うアクション
input.tt 入力テンプレート
confirm.tt 登録確認用テンプレート
complete.tt 登録完了ページ用テンプレート
messages.yml エラーメッセージ定義ファイル(前回の記事と同様)

次のページ
実行例

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5886 2011/05/06 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング