現在上記タグでWebアプリケーションを作っています。FWはDomaです。
今登録処理を作っていてCSRF対策の対応を入れています。
画面のモーダル内のボタン押下時にその登録処理が走り、完了モーダルが表示されるつくりです。
その ボタン押下→登録→モーダル表示 の流れをAjaxを使って行っています。
質問があって
結論から言うと
AjaxでSession情報を送れていたのにある時から急に送れなくなった原因は何だと推測されるでしょうか?
という点です。
詳しく説明すると、
CSRF対策用の情報を画面の初期表示時にSessionに詰め込み(HogeActionクラス)、
登録ボタン押下時にAjaxでSession情報を渡し、サーバー側(FugaAction)で受け取る実装になっている。
たしかFugaActionクラスではHttpRequestクラスを使ってSession情報を受け取っていた?
AjaxのSession情報の維持の仕方は以下サイトを参考にし、次のコードを追記した。
SESSION情報を維持したままAjaxな処理を行う方法
javascript
1 beforeSend: function(xhr) { 2 xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 3 },
先週末までこの実装でSession情報の受け渡しができていたのだが、
本日急にSession情報が受け取れなくなりました。
受け取るパラメータの一つであるHttpRequestクラスの中のsession情報がnullで返ってくるようになっていたのです。
コードもできていたときと特に変わっていないし、他の画面ではこの流れの実装が問題なく動くところもあるのです。
もちろんチーム開発ですので、他の共通部分や何かしらの環境が変わったなどあるかもしれませんが、
いまいち原因と対応策をつきとめられずにいます。
Session周りは調査するのも難しく、私もほとんど慣れていないので、どういった原因がありえるのかいまいち把握できていません。
もしそのような経験のある方、推測される原因・対応策をお教えくださる方、なんでもいいのでアドバイスをくださる方がいらっしゃればお願いいたします。
追記
そもそもやり方が間違っていました。
リンク先のやり方では、サーバー側の値を渡していないので結局クライアントとクライアントの値を比べることになってしまいます。
これでは改ざんされる恐れもあるので要件を満たしていませんでした。
そのためajax側でsession情報を渡す処理が必要になります。
そのやり方をもし知っている方がいれば教えていただきたいです。
送信部分のコード
javascript
1$.ajax({ 2 url: "/fuga/", 3 type: "POST", 4 data: { 5 "foo" : "bar", 6 "key" : $("#key").val() 7 }, 8 success: function() { 9 alert("登録できました"); 10 }, 11 error: function() { 12 alert("登録に失敗しました"); 13 } 14});
回答3件
あなたの回答
tips
プレビュー