Bug(バグ) #2333
未完了携帯版を SSL が必須なアプリケーションに登録している場合に携帯でログイン出来ない
0%
説明
Yuya Watanabe さんが約13年前に更新
本チケットに記載された情報をもとに手元の環境で再現を行おうとしましたが,報告された問題が確認できませんでした.以下に確認内容を示します.
確認環境¶
OpenPNE3.7.0-dev (master)MacOSX 10.7.1
Firefox 6.0.2
FireMobileSimulator 1.2.2
- DC P903i
- AU W53CA
- SB J-SH010
- SB 930SH
確認手順¶
- OpenPNE3.7.0-devを通常通りインストールして管理画面で以下の設定を行う
・SNS設定->認証関連設定
「PC・携帯両方から登録可」
・SNS設定->携帯関連設定
「携帯電話のIP帯域をチェックしない」 - config/OpenPNE.ymlの編集を下記のように行う
- use_sslをfalse, ssl_required_applicationsに"mobile_frontend"を含めない
- use_sslをfalse, ssl_required_applicationsに"mobile_frontend"を含める
- use_sslをtrue, ssl_required_applicationsに"mobile_frontend"を含めない
- use_sslをtrue, ssl_required_applicationsに"mobile_frontend"を含める
- 「./symfony cc」を実行する
- Firefoxの「環境設定」->「プライバシー」->「履歴」の「サイトから送られてきたCookieを保存する」を以下のように設定する
- チェックを入れる
- チェックを外す
- Firefoxの「環境設定」->「プライバシー」->「履歴」の「Cookieを表示…」で「すべてのCookieを削除する」を行う
- クライアント側でFMSの機種を下記のように設定する
- DC P903i
- AU W53CA
- SB J-SH010
- SB 930SH
- OpenPNEのサイトの携帯版に下記のスキームでアクセスする
- httpスキーム
- httpsスキーム
- メンバのアドレス,パスワードを用いてログインしようとする
- ログインが完了しSNSのホームが表示されるかどうかを確認する
確認結果¶
Cooikeを保存しない設定の状態でAU W53CAおよびSB 930SHを用いてログインしようとした際に本チケットに記載された結果が得られました.他の設定の影響はありませんでした.その他状況においては正常にログインできたことを確認しました.この確認での懸念としては実機での確認は行っていないことが挙げられます.
Yuya Watanabe さんが約13年前に更新
au実機を用いた際に再現したことを確認しました.
au機においてCookieを使いながらSSLを用いる実装が困難だったため, #2341 と同様にau機でありconfig/OpenPNE.ymlのuse_sslがtrueである場合にセッションIDをURLパラメータで引き回す実装を行うことを検討しました.
Yuya Watanabe さんが約13年前に更新
調査結果¶
au実機でログイン出来ない状況について調査した結果を下記に記述します.
config/OpenPNE.yml内記述について.¶
- 使用した実機はau機とsoftbank機
- base_url, ssl_base_urlを設定
- use_sslをtrueに設定
- ssl_required_applicationsにはmobile_frontendを含まない
- ssl_required_actionsにはデフォルトのままの状態である
mobile_frontend: ["member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/login", "member/logout", "member/invite", "member/configUID"]
調査内容¶
dev環境で得られたログの一部を記載します.ログ開始はログイン画面を開いた状態でopAuthMailAddressによるログインで,
メールアドレスおよびパスワードが正しいものを入力したあとに「ログイン」ボタンをクリックしたところからとなります.
注目するところとしては最初のリダイレクトが発生した直後に認証に成功しているかどうかです.
au機の場合は最初のリダイレクト後に認証に失敗していますが,softbank機は最初のリダイレクト後に認証に成功しています.
つまり,リダイレクト時に認証情報が失われている可能性が考えられます.
- au機
Sep 18 16:31:42 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*) Sep 18 16:31:42 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice) Sep 18 16:31:42 symfony [info] {sfPatternRouting} Match route "login" (/member/login/*) for /member/login/authMode/MailAddress with parameters array ( 'module' => 'member', 'action' => 'login', 'authMode' => 'MailAddress',) 9月 18 16:31:43 symfony [info] {myUser} User is not authenticated 9月 18 16:31:43 symfony [info] {myUser} User is not authenticated 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 9月 18 16:31:43 symfony [info] {memberActions} Call "memberActions->executeLogin()" 9月 18 16:31:43 symfony [info] {myUser} User is not authenticated 9月 18 16:31:43 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:31:43 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:31:43 symfony [info] {myUser} User is authenticated 9月 18 16:31:43 symfony [info] {myUser} Add credential(s) "SNSMember" 9月 18 16:31:43 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com:443/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=skIkbgBcF0HZ5po9HGrvzISMjFgTuyaPqyiXDudY65I%3D&ts=1316331103" 9月 18 16:31:43 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 9月 18 16:31:43 symfony [info] {opWebResponse} Send header "Location: https://example.com:443/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=skIkbgBcF0HZ5po9HGrvzISMjFgTuyaPqyiXDudY65I%3D&ts=1316331103" 9月 18 16:31:43 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 9月 18 16:31:43 symfony [info] {opWebResponse} Send content (241 o) Sep 18 16:31:44 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*) Sep 18 16:31:44 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice) Sep 18 16:31:44 symfony [info] {sfPatternRouting} Match route "member_setSid" (/member/setSid) for /member/setSid with parameters array ( 'module' => 'member', 'action' => 'setSid',) 9月 18 16:31:44 symfony [info] {myUser} User is not authenticated 9月 18 16:31:44 symfony [info] {myUser} User is not authenticated 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 9月 18 16:31:44 symfony [info] {memberActions} Call "memberActions->executeSetSid()" 9月 18 16:31:44 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:31:44 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:31:44 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com:443/index.php/" 9月 18 16:31:44 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 9月 18 16:31:44 symfony [info] {opWebResponse} Send header "Location: https://example.com:443/index.php/" 9月 18 16:31:44 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 9月 18 16:31:44 symfony [info] {opWebResponse} Send content (108 o)
- Softbank機
Sep 18 16:34:31 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*) Sep 18 16:34:31 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice) Sep 18 16:34:31 symfony [info] {sfPatternRouting} Match route "login" (/member/login/*) for /member/login/authMode/MailAddress with parameters array ( 'module' => 'member', 'action' => 'login', 'authMode' => 'MailAddress',) 9月 18 16:34:31 symfony [info] {myUser} User is not authenticated 9月 18 16:34:31 symfony [info] {myUser} User is not authenticated 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 9月 18 16:34:31 symfony [info] {memberActions} Call "memberActions->executeLogin()" 9月 18 16:34:31 symfony [info] {myUser} User is not authenticated 9月 18 16:34:31 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:34:31 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:34:31 symfony [info] {myUser} User is authenticated 9月 18 16:34:31 symfony [info] {myUser} Add credential(s) "SNSMember" 9月 18 16:34:31 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=2BTNlCQFMp1kgb%2F9PWh2WRN8wK19aMiabl9xRG8xbb8%3D&ts=1316331271" 9月 18 16:34:31 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 9月 18 16:34:31 symfony [info] {opWebResponse} Send header "Location: https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=2BTNlCQFMp1kgb%2F9PWh2WRN8wK19aMiabl9xRG8xbb8%3D&ts=1316331271" 9月 18 16:34:31 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 9月 18 16:34:31 symfony [info] {opWebResponse} Send content (239 o) Sep 18 16:34:32 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*) Sep 18 16:34:32 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice) Sep 18 16:34:32 symfony [info] {sfPatternRouting} Match route "member_setSid" (/member/setSid) for /member/setSid with parameters array ( 'module' => 'member', 'action' => 'setSid',) 9月 18 16:34:32 symfony [info] {myUser} User is authenticated 9月 18 16:34:32 symfony [info] {myUser} Add credential(s) "SNSMember" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 9月 18 16:34:32 symfony [info] {memberActions} Call "memberActions->executeSetSid()" 9月 18 16:34:33 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:34:33 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this. 9月 18 16:34:33 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com/index.php/" 9月 18 16:34:33 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 9月 18 16:34:33 symfony [info] {opWebResponse} Send header "Location: https://example.com/index.php/" 9月 18 16:34:33 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 9月 18 16:34:33 symfony [info] {opWebResponse} Send content (104 o)
Yuya Watanabe さんが約13年前に更新
note-7に続いて,下記状態においてssl利用時に認証情報が引き継がれているかどうかを確認しました.
config/OpenPNE.yml内記述について.¶
- 使用した実機はau機
- base_url, ssl_base_urlを設定
- use_sslをtrueに設定
- ssl_required_applicationsにはmobile_frontendを含まない
- ssl_required_actionsから「member/login」を削除する
mobile_frontend: ["member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/logout", "member/invite", "member/configUID"]
確認結果¶
この確認環境ではログインには成功しますが,他のSSLが必要である部分である「member/config」などのページを閲覧しようとすると「このページを見るにはログインが必要です」というメッセージとともにログイン画面へ遷移します.これによりSSLを用いるページとそうでないページで認証情報が共有できていないことが考えられます.
Yuya Watanabe さんが約13年前に更新
確認内容¶
Cookieが得られるかどうか.
確認環境について¶
- FMSのau機と実機のau機の2つ
- base_url, ssl_base_urlを設定
- use_sslをtrueに設定
- ssl_required_applicationsにはmobile_frontendを含まない
- ssl_required_actionsに「member/home」を追加する
mobile_frontend: ["member/home", "member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/login", "member/logout", "member/invite", "member/configUID"]
- setSidにリダイレクトを通さないようににする
diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php index 7d66a46..0549e67 100644 --- a/lib/user/opSecurityUser.class.php +++ b/lib/user/opSecurityUser.class.php @@ -259,20 +259,21 @@ class opSecurityUser extends opAdaptableUser $uri = $this->getAuthAdapter()->getAuthForm()->getValue('next_uri'); // sharing session id between HTTP and HTTPS is needed - $request = sfContext::getInstance()->getRequest(); - if (sfConfig::get('app_is_mobile', false) - && sfConfig::get('op_use_ssl', false) - && $request->isSecure() - && ($request->getMobile()->isSoftBank() || $request->getMobile()->isEZweb()) - ) - { - $item = $this->encryptSid(session_id()); - - $uri = '@member_setSid?next_uri='.$uri - .'&is_remember_login='.(int)$this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me') - .'&sid='.$item[0] - .'&ts='.$item[1]; - } + //$request = sfContext::getInstance()->getRequest(); + //if (sfConfig::get('app_is_mobile', false) + // && sfConfig::get('op_use_ssl', false) + // && $request->isSecure() + // && ($request->getMobile()->isSoftBank() || $request->getMobile()->isEZweb()) + //) + //{ + // $item = $this->encryptSid(session_id()); + + // $uri = '@member_setSid?next_uri='.$uri + // .'&is_remember_login='.(int)$this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me') + // .'&sid='.$item[0] + // .'&ts='.$item[1]; + //} $this->setCulture($this->getMember()->getConfig('language', sfConfig::get('sf_default_culture')));
- ヘッダーの中身を出力する
diff --git a/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php b/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php index 6917fb0..dee88f3 100644 --- a/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php +++ b/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php @@ -29,6 +29,13 @@ class sfBasicSecurityFilter extends sfFilter */ public function execute($filterChain) { + if ( + ('member' == $this->context->getModuleName()) && ('home' == $this->context->getActionName()) + ) + { + var_dump(getallheaders()); + exit(0); + } // disable security on login and secure actions if ( (sfConfig::get('sf_login_module') == $this->context->getModuleName()) && (sfConfig::get('sf_login_action') == $this->context->getActionName())
結果¶
FMSのau機は以下のような項目が存在するが実機のau機には存在しなかった.
'Cookie' => string 'OpenPNE_mobile_frontend=9t3jqmoflbj5m19ovubg56nim4' (length=145)
Kousuke Ebihara さんが約13年前に更新
諸事情によって実機での一時的に確認ができなくなってしまったので、プロキシを用いて「HTTP と HTTPS 間で Cookie を共有しない」という状態を擬似的に作り出して再現を試みました。
このチケットを作成した時点の予測では、 setSid アクションに遷移する際に強制的に HTTP にリダイレクトしようとする場面でなんらかの問題があるものとあたりをつけていましたが、実際の挙動を確認すると、ログイン操作からホーム画面に遷移する間のすべてのリクエストは HTTPS に対しておこなわれています。ホーム画面が表示されるまでにアクセスした URL は以下の通りです。
https://example.com/index.php/member/login/authMode/MailAddress https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=LwEBbzGuTIZhd6OFKdhdWtJ3wHbMaonRtGyzU64+YyA%3D&ts=1317215760 https://example.com/index.php/
これだけ見れば正常な挙動なように思います。OpenPNE の問題ではない可能性もでてきました。
Mutsumi Imamura さんが約13年前に更新
- 対象バージョン を削除 (
OpenPNE 3.7.0) - 3.6 で発生するか を削除 (
Yes) - 360対象 を削除 (
3.6.0)
#note-12 の理由より、対応を見送ります。