質問 > フロント機能 > トップページでのログイン判定について |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kjt |
投稿日時: 2010/5/15 1:06
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
トップページでのログイン判定について ---------------------------------------------------------------
EC-CUBE :ナイトリービルド版 2.4.2-comu(eccube-comu-r18615) PHP : 5.1.6 DB : PostgreSQL 8.4.3 OS : CentOS5.4 WebServer: Apache/2.2.3 Blowser: Google Chrome 5.0.375.38 beta ---------------------------------------------------------------- 初めまして。 いつもこの開発コミュニティにとても助けられていますが、自力で解決することができなかったので初めて投稿させていただきました。 予め会員登録をした人にのみ公開するようなECサイトを設計しようとしています。つまり、トップページにアクセスした時にログイン画面のみが表示され、そこで認証が成功した場合のみ従来のようなトップページが表示されるといったものです。 ・初回アクセス時、ログイン画面のみが表示される ・ログイン後、ログアウトのみができる ・ログアウト時、トップページに戻りログイン画面が表示される loginブロックのソースを読んだり似たような事例を検索したところ、変数tpl_loginによる分岐が該当する解決方法になるかと思います。(参考にした過去ログは、http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=5325&forum=11 、 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=1388&forum=10 などです。) そこでindex.phpを参照してソースを追ったところ、TOPページのBODY部分はsite_main.tplによっているとのことだったので、まずこれを最後に添付した様に編集しました。概要は次の様なイメージです。 site_main.tplの編集概要
しかしこれだけでは、トップページに表示されるのはログインブロック(とフッタ)だけになるものの、実際アドレスとパスワードを入力しても期待した通り従来のトップページへと遷移しません。以下のようなページに遷移してしまいます。 ページタイトル: [店名] / エラー URL: http://******/frontparts/login_check.php 試しにtpl_loginをvar_dumpしてみたところ、NULLと表示されていましたのでこれが原因なのでしょうか。 tpl_loginへのログイン判定結果の格納されていないのかと思い過去ログを参照して、以下をLC_Page_Index.phpの65行目に追加してみましたが、結果は変わりませんでした。
何か見当違いなことをしているのかもしれませんが、冒頭に示したようなサイトを実現するにはどうすればよいでしょうか。解決に向けてアドバイスいただければ大変うれしいです。 よろしくお願いいたします。 site_main.tpl(編集後、非変更部分で多少省略しています)
|
kjt |
投稿日時: 2010/5/16 6:32
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
Re: トップページでのログイン判定について 自己レス失礼致します。
(先ほどの投稿で申し遅れましたが、当方PHPに関しては初心者です。ECCUBEをカスタマイズしつつ勉強しています。) 上記の投稿をした後、いろいろ検討した結果、以下の方法で実現することができました。 0、site_main.tplを上記のように変更する($tpl_loginを用いた条件分岐) 1、LC_Page_FrontParts_LoginCheck.phpの59〜61行目(不正なURLがPOSTされた場合はエラー表示)をコメントアウト 2、LC_Page.phpのinit()内に以下のログイン判定項目を追加
確かにトップページではログインブロックのみが表示され、認証後従来のメイン画面が表示され、ログアウトするとログインブロックのみの画面に戻る、という挙動をするようになりました。 ただ、上記の手順のうち1に挙げた部分をコメントアウトしてしまったのが気になります。トランザクショントークンの使用による不正な画面遷移の防止、という部分になると理解していますが、これをコメントアウトする事でECサイトとしてどれだけ危険になってしまうのかがよく理解できていません。。 知識不足のためこの方法でよかったのかどうか図りかねております。 これはさすがによくない方法だ、とか、もっといい方法がある、などなんでもよいのでコメントをいただけないでしょうか。 おそらく説明がわかりにくいところがあるかと思いますので、その際はご指摘ください。 よろしくお願い致します。 |
seasoft |
投稿日時: 2010/5/16 11:08
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: トップページでのログイン判定について まぁ、PHP & Smarty なので、kjt 様のコード記述で十分ですが、下記のように書くとスマートかも。
・・・って、EC-CUBE の標準ソースでも if 分岐でセットしていますね・・・ ^^; > ただ、上記の手順のうち1に挙げた部分をコメントアウトしてしまったのが気になります。トランザクショントークンの使用による不正な画面遷移の防止、という部分になると理解していますが、これをコメントアウトする事でECサイトとしてどれだけ危険になってしまうのかがよく理解できていません。。 一般論としてですが、XSRF に対して脆弱になるかもしれませんね。 個々のソースは細かく査読していませんが、全体の方向性としては良いアイディアだと思いますよ。
|
ゲスト |
投稿日時: 2010/5/16 17:06
対応状況: −−−
|
Re: トップページでのログイン判定について 引用:
小生も、脆弱性を嫌って、どうしたもかと、思案してて、 ある時(まぁ、今週ですが、、、)、ふと、MyPageをコピーすればいいのでは、と思い、実装しました。 始めは、そのままMyPageにRedirectしたので、ログイン後、TOPページでは無く、MyPageが表示されてましたが、今では、 tpl class class_extend の連携を把握したので、ちゃんと、 ログイン後はTopページを表示し、 ログアウトはTopページからと出来ました。 MyPageをコピーしてますので「会員登録」も出来てしまいますが、 不要ならば、そこのコードは、ばっさり、削除すれば、よい話ですし。 GPLですので、もしも、コードの公開をご希望ならば、ご要望ください。 |
|
kjt |
投稿日時: 2010/5/17 2:23
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
Re: トップページでのログイン判定について seasoft様
アドバイスいただき有り難うございます。 XSRFですか。。やはりECサイトである以上脆弱性はできるだけ取り除いたサイトにしたいので、勉強しつつ、コメントアウトしないで済むような方法も考えていきたいと思います。 ちなみに、いまいち理解が曖昧なのですが、トランザクショントークンによる不正画面遷移の防止と、セッションIDによるセッション管理というのはまったく別次元の話なのでしょうか。 トランザクショントークンの生成は、getToken()の使用場所を調べてみたところ以下のようになっています。
対して、セッションの開始を担当しているsfDomainSessionStart(これであっているでしょうか)の使用場所は以下のようになっています。
これらを見てみると、結局SC_ViewのSC_SiteViewでセッションが開始されているので、顧客側のWebサイト表示では常にセッションが再生成されているということになり、そのIDによる管理があればトランザクショントークンはなぜ必要なのかわかりません。 検討違いなことを申し上げているかもしれませんが、以上の点について疑問でしたので、なんらかお答えいただければ幸いです。 よろしくお願い致します。 |
kjt |
投稿日時: 2010/5/17 2:32
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
Re: トップページでのログイン判定について Ringo様
ご回答ありがとうございます。 MyPageのソースにて試されたという事ですが、この場合だとトランザクショントークン部分のコメントアウトがなく、安全だということでしょうか。 引用:
もしよろしければ、ぜひとも参考にさせていただきたいのでお願い致します。 |
seasoft |
投稿日時: 2010/5/17 2:55
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: トップページでのログイン判定について 基本的に PHP のセッションキーは、クライアント側でブラウザを閉じない限りは同じ ID を使い続けます。(アクセスごとに再生成はされません)
そのため、XSRF 対策を考える必要があるのだと思います。(トランザクショントークンは使い捨て(1回限り有効)です。) # XSRF 対策の部分を実装したのは私ではないので、誤ったことを書いていたらゴメンなさい。
|
ゲスト |
投稿日時: 2010/5/17 9:51
対応状況: −−−
|
マスタログイン 会員制 Re: トップページでのログイン判定について <--- 追記 '12.05.23
マスタログイン 会員制 2_11-devへの適用例: http://www.kudzilla.com/~hic/eccube-dev/2_11-dev/1-master_login.pdf ID/PWD : hic/Ringo ---> 引用:
・現状より「安全性が低下しない」と理解してます。 ・コードを添付しますので、検討してみてください。 ・対象はECCUBE2.4.3です。comu版と差が有る場合は、適時、修正してください。 '10.05.17 追記 ・$this->sendRedirect($this->getLocation("login/login.php")); では『eccube/data/install.php』の「SITE_URL」にRedirectします。 ・「SITE_URL」には"https://..."を設定してください。 ↓「SSL_URL」に遷移させる方法の調査結果を反映。 $this->sendRedirect($this->getLocation("login/login.php", array(), true)); '10.08.02 修正 「_Login_」の「_Login_」(強調)漏れ2箇所 <ファイル構成> 1.マスタログイン→MYページ改(login)への強制遷移→ログイン→TOPページ。 1)『eccube/data/class/pages/login/』 a)LC_Page_Login_Login.php (元:mypage/LC_Page_Mypage_Login.php) b)LC_Page_Login_LoginCheck.php (元:mypage/LC_Page_Mypage_LoginCheck.php) 2)『eccube/data/class_extends/page_extends/login/』 a)LC_Page_Login_Login_Ex.phpphp (元:mypage/LC_Page_Mypage_Login_Ex.php) b)LC_Page_Login_LoginCheck_Ex.php (元:mypage/LC_Page_Mypage_LoginCheck_Ex.php) 3)『eccube/data/class_extends/page_extends/』 a)LC_Page_Index_Ex.php (マスタログイン化の先頭処理) 4)『eccube/html/login/』 a)index.php (元:html/index.php) b)login_check.php (元:mypage/login_check.php) c)login.php (元:mypage/login.php) 2.「商品一覧」「商品詳細」に「ログインチェック」を入れる。 1)『eccube/data/class_extends/page_extends/products/』 a)LC_Page_Products_List_Ex.php (「商品一覧」) b)LC_Page_Products_Detail_Ex.php (「商品詳細」) 3.ヘッダの中の[会員登録],[カゴの中を見る]を無くす。(好みで。) 1)『eccube/data/Smarty/templates/default/』 a)header.tpl
|
|
kjt |
投稿日時: 2010/5/17 18:36
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
Re: トップページでのログイン判定について seasoft様
ご返信ありがとうございます。 セッションとトークンの間にはそういう使い分けがあったのですね。。引き続き、これを理解したうえでソースを見ていきたいと思います。 ありがとうございました。 |
kjt |
投稿日時: 2010/5/17 18:38
対応状況: −−−
|
新米 登録日: 2010/3/21 居住地: 投稿: 7 |
Re: トップページでのログイン判定について Ringo様
試行錯誤のソースを教えていただいてありがとうございます。 しかもこんなにご丁寧に。。感激です。 まずは検討してみたいと思います! |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |