■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

Re: フォーム送信したら「type:csrf」や「type:auth」エラーが出ます。

n1215 > Re: フォーム送信したら「type:csrf」や「type:auth」エラーが出ます。 @ 2014/12/18 19:00
V.bunny 様

baserCMSの管轄にあるページに対し、フォームによるHTTPリクエストを行った場合、
デフォルトではセキュリティに関するチェックが行われる仕様になっています。

・CSRF対策
攻撃用の外部Webページから利用者の意図しないHTTPリクエストを送るCSRF(クロスサイトリクエストフォージェリ)攻撃への対策として、
多くのWebアプリケーションフレームワークでCSRFトークンというランダムな値を利用する仕組みが実装されています。
サーバでHTMLを生成した際にCSRFトークンをformのhiddenパラメータ等として仕込んでおき、
フォームデータの送信時にこのトークンをサーバ側で再び確認することで、不正なリクエストを防ぐというものです。

CakePHP/baserCMSでもこの仕組が実装されており、メールプラグインはこの仕様に合わせて実装されています。
例えば公式サイトの事例掲載申込ページのフォームのソースを見ていただければ、このようになっています。
http://basercms.net/postworks/index
<form action="/postworks/confirm" novalidate="novalidate" id="MessageIndexForm" enctype="multipart/form-data" method="post" accept-charset="utf-8">
<div style="display:none;">
<input type="hidden" name="_method" value="POST"/>
<input type="hidden" name="data[_Token][key]" value="ここにCSRFトークンの値" id="Token633941872"/>
</div>
<input type="hidden" name="data[Message][mode]" id="MessageMode"/>

現在試されているフォームにはそもそもCSRFトークンをhiddenパラメータで埋め込んでいないのでエラーが出ているということですね。

・フォームの改ざん防止
同様にCakePHP/baserCMSのフォームのセキュリティに閑する機能として、フォームの入力項目が増減していたり改ざんされて不正なパラメータが入り込んでいないか、
リクエスト元のURLが正当かどうかをチェックする機能があります。
データを入れた際に引っかかっているのはこちらのチェックです。


baserCMSの中でフォームを扱う際にはこれらの仕様を考慮する必要があります。
フォーム設置の目的によりどうするのかが最適かは変わりますが、
対応策としては下記のいずれかになるでしょう。

* 該当のページでCSRF対策・フォーム改ざんチェックを行わないようにbaserCMSのコードを上書きする(基本的に非推奨)
* POSTではなくGETやただのaタグによるリンクで実装する(場合によっては意図しない脆弱性を生むかもしれません)
* baserCMSのメールプラグインで代用する
* CakePHP/baserCMSのセキュリティの仕様に合わせ、Formヘルパーを利用したフォームをプラグインとして追加開発する

Twitter: @n_1215

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
16 人のユーザが現在オンラインです。 (16 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 16