CSRFってご存じですか?
詳しくの説明は別の機会でログを残しますが(俺もまだよくわかっていない)、ワンタイムidをviewにセットして、セッション書き換えなどの脆弱性から守るための仕組みです。
問い合わせフォームとかでよく使われると思っていますが、今回Play Framework
で開発していて、Google Chromeではうまくいった処理が何故かFireFox、Safariで失敗する現象を確認したのでメモします。
といっても、単純でした。そもそも効いていなかったのが原因でした。
詳しくは、viewではCSRFを設定していたけど、controllerでは設定していなかったのが原因です。
// 表示するAction @AddCSRFToken // これがなかった。 public static Result show() { // 省略 } // 更新するAction @RequireCSRFCheck // これもなかった。 public static Result post(long id) { // 省略 }
Google Chromeでは何故かエラーが出ず、他のブラウザではチェックが厳しいのでエラーが発生したと見るべきでしょう。
うーむ。Chrome...(俺が悪いんだけどねorz)