CakePHPに限ったことではありませんが、考え方としては以下の様な感じになります。
どれくらい厳密にアクセス制限するかによって手間はかなり変わりますね。
[とても簡易的な実装]
Aページを表示する際にリファラーをチェックして、Bページから来た時だけ表示を許可する
参考
*リファラーは偽装可能なので、Aページへのアクセスを厳密に制限したい時には使えません。
[少し簡易的な実装]
Bページにアクセスした際に、[Bページへのアクセス記録]を保存
Aページにアクセスした際にセッションに[Bページへのアクセス記録]が存在していれば表示を許可する。
*Bページ以外にアクセスした際[Bページへのアクセス記録]を削除するような実装をしないと一度Bページにアクセスしたらセッションが切れるまでURL直入力でアクセス出来るようになってしまうので注意
[厳密な実装]
- Bページにアクセスしたタイミングで一意なIDを生成し、Aページへのアクセストークンとしてデータベースに保存
- BページにあるAページへのリンクにアクセストークンを埋め込む(もしくはフォーム値として埋め込む)
- Aページにアクセスした際に、アクセストークンをチェックしてデータベースに存在していた場合のみアクセスを許可する。アクセストークンが再利用されないように、Aページを表示したタイミングでデータベースから削除する
キーワードとしてはCakePHP ワンタイムトークンあたりでしょうか。
参考
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/03 08:09