• カテゴリ その他 の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - TOKENがおかしい?!

TOKENがおかしい?!

カテゴリ : 
不具合情報 » その他
執筆 : 
masa 2014/6/12
xoopsX で新たに作ったサイトで chrome や FireFox で新規登録しようとすると

照合用のワンタイム・チケットが見つかりませんでした。
ほとんどの場合は操作手順の関係でワンタイム・チケットが消費されただけですが、
CSRF攻撃を受けた可能性もあります
(この操作は本当にあなたが望んだ操作ですか?) 
操作内容をしっかり確認し、もう一度操作を行ってください。

と表示されて、登録ができないという状況が発生。
IEでも最初の一回目は同様のメッセージが出たり出なかったり...
新規登録に限らず、トークンがすべてだめのようだ。

いろいろ試してみると、どうもこのサイトのために作ったテーマのせいらしいことが分かった。
標準のテーマなら新規登録できるのだが、テーマを変えると問題が起こる。
何か、大事なものを入れ忘れているのか?

まずは状況確認...

新規登録画面を出して、ソースを開き、フォームの変数 module.user.UserRegisterEditForm.TOKEN の value を確認する。
うーむ、値は入っているようだ。

では次に、その時のセッション変数の値を確認するために phpMyAdmin で xxxxx_session テーブルの中身を開き、sess_data の module.user.UserRegisterEditForm.TOKEN の値を見る。

こちらにも値は入っているが、フォーム変数に設定されている値とは違う値になっている!!!???

どういうことだ?
この時点でかなりパニック

うーーーー。
とにかくテーマに問題があるのだから、theme.html を直すしかない...
ということで、コードをどんどん削っていく。
いくら削っても変わらない...
最後の最後↓を削ったらビンゴ!


<link rel="SHORTCUT ICON" href="" >
<link ref="icon" href="" type="image/ico" />


うーん
どういうことだろう?
href="" なので、該当のURL に対して2度アクセスしてしまったということだろうか?
理屈からするとあり得そう。
1度目にアクセスしたときに TOKENが作られて FORM に埋め込まれる。
href="" でもう一度リクエストがきて、再度 TOKENが作られて、その値でDBの値が上書きされるためにTOKENの値がミスマッチになるということだ。

chrome のネットワークモニターで見ても2度目のアクセスは出てこないのが気になるが、
favicon のアクセスは通常のアクセスとは別に行われているようで、それは link 要素で指定した場合でもそうなのかもしれない。
fiddler あたりで確認すればわかるのだろうが、理屈があっているので良いことにする。

とにかくこれにて一件落着。勉強になりました。

それにしてもデザイナーさん!
こういう技術力を試すような罠を入れておくのはお願いだからやめてください<(_ _)>0
  • トラックバック (0)
  • 閲覧 (6519)