バグ報告 > その他 > MyページでSSL通信していない不具合 |
その他
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
CherryO |
投稿日時: 2010/5/8 18:57
対応状況: −−−
|
新米 登録日: 2010/2/12 居住地: Tokyo 投稿: 3 |
Re: MyページでSSL通信していない不具合 IE6での警告の件ですがログイン・ログアウト時のリダイレクト先のURLを、https〜にすればよいので
data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php を下記に修正してはどうでしょうか? if(count($arrErr) == 0) { if($objCustomer->getCustomerDataFromEmailPass($arrForm['login_pass'], $arrForm['login_email'], true)) { // ★ ここから - カスタマイズ部分 - ログイン・ログアウト時のリダイレクト先のURLを、https〜にする // 編集前 //$this->sendRedirect($this->getLocation(URL_DIR, array(), false)); // 編集後 $this->sendRedirect($this->getLocation(URL_DIR, array(), true)); // ★ ここまで - カスタマイズ部分 - ログイン・ログアウト時のリダイレクト先のURLを、https〜にする exit; } else { $arrForm['login_email'] = strtolower($arrForm['login_email']); 〜〜〜 case 'logout': // ログイン情報の解放 $objCustomer->EndSession(); $mypage_url_search = strpos('.'.$_POST['url'], "mypage"); // ★ ここから - カスタマイズ部分 - ログイン・ログアウト時のリダイレクト先のURLを、https〜にする // 編集前 //マイページログイン中はログイン画面へ移行 //if ($mypage_url_search == 2){ // $this->sendRedirect($this->getLocation(URL_DIR . "mypage/login.php", array(), false)); //}else{ // $this->sendRedirect($this->getLocation(URL_DIR, array(), false)); //} // 編集後 //マイページログイン中はログイン画面へ移行 if ($mypage_url_search == 2){ $this->sendRedirect($this->getLocation(URL_DIR . "mypage/login.php", array(), true)); }else{ $this->sendRedirect($this->getLocation(URL_DIR, array(), true)); } // ★ ここまで - カスタマイズ部分 - ログイン・ログアウト時のリダイレクト先のURLを、https〜にする exit; break; } } これで消えますよ。 |
ironman |
投稿日時: 2009/8/29 23:53
対応状況: −−−
|
半人前 登録日: 2009/8/25 居住地: 投稿: 14 |
Re: MyページでSSL通信していない不具合 >トップのログインブロックは、トップページがhttp://dimain/ で、POST先がhttps://domain/frontparts/login_check.php となり、リダイレクトでhttp://domain/ へ戻ります。
ありがとうございます。 素人で、そういったリンクの設定に気づきませんでした。 SSL_URLこれで、目的のhttpsページに飛ぶようになりました。 PHPは全く判らなかったので、手探り状態でいじっておりましたので、本当に助かりました。 ありがとうございました。 |
ramrun |
投稿日時: 2009/4/14 20:02
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: MyページでSSL通信していない不具合 引用:
皆様のサイトは違うということで不思議に思っております。 ここで回答しておられる方たちはテンプレート等、気に入らないところをガリゴリ変更するでしょうから、デフォルトをちょっといじった程度だと同じ結果になると思いますよ... たとえばヘッダーにある[MYページ]ボタンは、 ・2.4.0-RC1ではhttp ・comuではhttps のログインページへ飛ぶようになっています。 トップのログインブロックは、トップページがhttp://dimain/ で、POST先がhttps://domain/frontparts/login_check.php となり、リダイレクトでhttp://domain/ へ戻ります。 なので例の警告がでることになるんですよね。 |
dellbell |
投稿日時: 2009/4/14 17:53
対応状況: −−−
|
半人前 登録日: 2009/1/14 居住地: 投稿: 18 |
Re: MyページでSSL通信していない不具合 nanasess 様
kishik 様 親切にお返事ありがとうございます。 >こちらは, どのような振舞いにするのをご希望でしょうか? >ブラウザの基本的な振舞いに従って, カスタマイズするしかないと思いますが... IE6に対応したいと考えておりました。しかし私の知識では無理そうなので、とりあえずパッチを充てhttpsで送るようにしようと考えております。 >$netURL->protocol 上記ですが今まで調べたのですが、私には調べ方すらも分からずじまいでした。 また知人のサイトでも検証(2.3.0)しましたが、IE6で同じ結果がでておりました。 皆様のサイトは違うということで不思議に思っております。 |
kishik |
投稿日時: 2009/4/14 15:08
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: MyページでSSL通信していない不具合 すみません。
nanasessさんのやり方が一番正しいですね。 MyPageに入る一番最初からhttpsで入ると改善されそうです。 テンプレート内の<form>がrootからの相対パスのみで、 httpsかhttpかを指定していませんね。 リダイレクト部分だけはNET_URLが見分けていると思います。 引用:
パッチを充てない状態だと、 パスワードも含めて、 全て単なるhttpで送っていないでしょうか。。。 間違ってますかね? |
nanasess |
投稿日時: 2009/4/14 13:29
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: MyページでSSL通信していない不具合 引用:
こちらは, どのような振舞いにするのをご希望でしょうか? ブラウザの基本的な振舞いに従って, カスタマイズするしかないと思いますが... |
kishik |
投稿日時: 2009/4/14 12:57
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: MyページでSSL通信していない不具合 dellbellさん
少し言葉足らずでしたが、 $netURL->protocol という1行を(検索ではなく)挿入して、 この値がどうなっているかを 調べてみては?という意味でした。 sendRedirectの中で呼ばれている Net_URLというクラスの中で httpsとhttpとの振り分けをしてますので。 どちらが入っているか、 $netURL->protocol に入っています。 |
dellbell |
投稿日時: 2009/4/14 12:54
対応状況: −−−
|
半人前 登録日: 2009/1/14 居住地: 投稿: 18 |
Re: MyページでSSL通信していない不具合 nanasess様
コメントありがとうございます。 <input type="hidden" name="url" value="<!--{$smarty.const.SSL_URL|sfTrimURL}--><!--{$smarty.server.PHP_SELF|escape}-->" />を追加しましたがセキュリティー警告が出てしまいます。 ブラウザをIE7、googlechromeで試してみると警告はでませんが、IE6では発生します。 普通TOPページなどからログインした際にはhttps://には変わらないのですね。 ではログイン情報はSSLで送り、httpにリダイレクトされる際に警告が発生しているということになるのでしょうか? <div id="loginarea"> <form name="login_form" id="login_form" method="post" action="<!--{$smarty.const.SITE_URL}-->frontparts/login_check.php" onsubmit="return fnCheckLogin('login_form')"> 上記ではもちろん警告は発生しませんでした。 |
nanasess |
投稿日時: 2009/4/14 12:21
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: MyページでSSL通信していない不具合 sendRedirect() 関数は, 単に与えられた URL の妥当性をチェックし, リダイレクトさせるだけなので, http:// や https:// の振り分けはしていません.
ログインページの場合は, 遷移先をフォームから POST しているので, 下記のパッチのように修正したらどうでしょうか? テンプレートを修正している場合は, 該当箇所を修正してください. data/Smarty/templates/default/bloc/login.tpl
はずしていたらすみません. |
dellbell |
投稿日時: 2009/4/14 12:04
対応状況: −−−
|
半人前 登録日: 2009/1/14 居住地: 投稿: 18 |
Re: MyページでSSL通信していない不具合 コメントありがとうございます。
data/class/pages/LC_Page.php の中にはみつかりませんでした。 またソースコード検索$netURL->protocol;を全ファイル検索しましたがみつかりませんでした。 また、私が運営しています。他サイト(2.3.0)もログインの際https:〜になりませんでした。 そもそもログインするとhttps;〜にリダイレクトされるのでしょうか? 皆様のサイトはいかがでしょうか? 下記がdata/class/pages/LC_Page.phpです。 // {{{ requires require_once(DATA_PATH . 'module/Net/URL.php'); /** * Web Page を制御する基底クラス * * Web Page を制御する Page クラスは必ずこのクラスを継承する. * PHP4 ではこのような抽象クラスを作っても継承先で何でもできてしまうため、 * あまり意味がないが、アーキテクトを統一するために作っておく. * * @package Page * @author LOCKON CO.,LTD. * @version $Id:LC_Page.php 15532 2007-08-31 14:39:46Z nanasess $ */ class LC_Page { // {{{ properties /** メインテンプレート */ var $tpl_mainpage; /** テンプレートのカラム数 */ var $tpl_column_num = 2; /** メインナンバー */ var $tpl_mainno; /** CSS のパス */ var $tpl_css; /** JavaScript */ var $tpl_javascript; /** タイトル */ var $tpl_title; /** カテゴリ */ var $tpl_page_category; /** ログインメールアドレス */ var $tpl_login_email; /** body タグの onload 属性 */ var $tpl_onload; /** 送料合計 */ var $tpl_total_deliv_fee; /** トランザクションID */ var $transactionid; // }}} // {{{ functions /** * Page を初期化する. * * @return void */ function init() {} /** * Page のプロセス. * * @return void */ function process() {} /** * デストラクタ. * * @return void */ function destroy() {} /** * 指定の URL へリダイレクトする. * * リダイレクト先 URL に SITE_URL 及び SSL_URL を含むかチェックし, * LC_Page::getToken() の値を URLパラメータで自動的に付与する. * * @param string $url リダイレクト先 URL * @param boolean $isMobile モバイル用にセッションIDを付与する場合 true * @return void|boolean $url に SITE_URL 及び, SSL_URL を含まない場合 false, * 正常に遷移可能な場合は, $url の ロケーションヘッダを出力する. * @see Net_URL */ function sendRedirect($url, $isMobile = false) { if (preg_match("/(" . preg_quote(SITE_URL, '/') . "|" . preg_quote(SSL_URL, '/') . ")/", $url)) { $netURL = new Net_URL($url); if (!empty($_SERVER['QUERY_STRING'])) { $netURL->addRawQueryString($_SERVER['QUERY_STRING']); } $session = SC_SessionFactory::getInstance(); if ($isMobile || $session->useCookie() == false) { $netURL->addQueryString(session_name(), session_id()); } $netURL->addQueryString(TRANSACTION_ID_NAME, $this->getToken()); header("Location: " . $netURL->getURL()); return true; } return false; } // }}} // {{{ protected functions /** * トランザクショントークンを生成し, 取得する. * * 悪意のある不正な画面遷移を防止するため, 予測困難な文字列を生成して返す. * 同時に, この文字列をセッションに保存する. * * この関数を使用するためには, 生成した文字列を次画面へ渡すパラメータとして * 出力する必要がある. * * 例) * <input type="hidden" name="transactionid" value="この関数の返り値" /> * * 遷移先のページで, LC_Page::isValidToken() の返り値をチェックすることにより, * 画面遷移の妥当性が確認できる. * * @access protected * @return string トランザクショントークンの文字列 */ function getToken() { if (empty($_SESSION[TRANSACTION_ID_NAME])) { $_SESSION[TRANSACTION_ID_NAME] = $this->createToken(); } return $_SESSION[TRANSACTION_ID_NAME]; } /** * トランザクショントークンの妥当性をチェックする. * * 前画面で生成されたトランザクショントークンの妥当性をチェックする. * この関数を使用するためには, 前画面のページクラスで LC_Page::getToken() * を呼んでおく必要がある. * * @access protected * @return boolean トランザクショントークンが有効な場合 true */ function isValidToken() { $checkToken = ""; // $_POST の値を優先する if (isset($_POST[TRANSACTION_ID_NAME])) { $checkToken = $_POST[TRANSACTION_ID_NAME]; } elseif (isset($_GET[TRANSACTION_ID_NAME])) { $checkToken = $_GET[TRANSACTION_ID_NAME]; } $ret = false; // token の妥当性チェック if ($checkToken === $_SESSION[TRANSACTION_ID_NAME]) { $ret = true; } unset($_SESSION[TRANSACTION_ID_NAME]); return $ret; } /** * $path から URL を取得する. * * 以下の順序で 引数 $path から URL を取得する. * 1. realpath($path) で $path の 絶対パスを取得 * 2. $_SERVER['DOCUMENT_ROOT'] と一致する文字列を削除 * 3. $useSSL の値に応じて, SITE_URL 又は, SSL_URL を付与する. * * 返り値に, QUERY_STRING を含めたい場合は, key => value 形式 * の配列を $param へ渡す. * * @access protected * @param string $path 結果を取得するためのパス * @param array $param URL に付与するパラメータの配列 * @param mixed $useSSL 結果に SSL_URL を使用する場合 true, * SITE_URL を使用する場合 false, * デフォルト "escape" 現在のスキーマを使用 * @return string $path の存在する http(s):// から始まる絶対パス * @see Net_URL */ function getLocation($path, $param = array(), $useSSL = "escape") { $rootPath = $this->getRootPath($path); // スキーマを定義 if ($useSSL === true) { $url = SSL_URL . $rootPath; } elseif ($useSSL === false){ $url = SITE_URL . $rootPath; } elseif ($useSSL == "escape") { if (SC_Utils_Ex::sfIsHTTPS()) { $url = SSL_URL . $rootPath; } else { $url = SITE_URL . $rootPath; } } else { die("[BUG] Illegal Parametor of \$useSSL "); } $netURL = new Net_URL($url); // QUERY_STRING 生成 foreach ($param as $key => $val) { $netURL->addQueryString($key, $val); } return $netURL->getURL(); } function getRootPath($path) { // $path が / で始まっている場合 if (substr($path, 0, 1) == "/") { $realPath = realpath(HTML_PATH . substr_replace($path, "", 0, strlen(URL_DIR))); // 相対パスの場合 } else { $realPath = realpath($path); } // HTML_PATH を削除した文字列を取得. // FIXME OS依存の処理は別クラスに分ける? // Windowsの場合は, ディレクトリの区切り文字を\から/に変換する if (substr(PHP_OS, 0, 3) == 'WIN') { $realPath = str_replace("\\", "/", $realPath); $htmlPath = str_replace("\\", "/", HTML_PATH); $rootPath = str_replace($htmlPath, "", $realPath); } else { $htmlPath = rtrim(HTML_PATH, "/"); $rootPath = str_replace($htmlPath, "", $realPath); $rootPath = ltrim($rootPath, "/"); } return $rootPath; } /** * ページをリロードする. * * 引数 $queryString に, $_SERVER['QUERY_STRING'] の値を使用してはならない. * この関数は, 内部で LC_Page::sendRedirect() を使用するため, * $_SERVER['QUERY_STRING'] の値は自動的に付与される. * * @param array $queryString QueryString の配列 * @param bool $removeQueryString 付与されていた QueryString を削除する場合 true * @return void * @see Net_URL */ function reload($queryString = array(), $removeQueryString = false) { // 現在の URL を取得 $netURL = new Net_URL(); if ($removeQueryString) { $netURL->querystring = array(); $_SERVER['QUERY_STRING'] = ''; } // QueryString を付与 if (!empty($queryString)) { foreach ($queryString as $key => $val) { $netURL->addQueryString($key, $val); } } $this->sendRedirect($netURL->getURL()); } /** * クライアントのキャッシュを許可する. * * session_start時のno-cacheヘッダーを抑制することで * 「戻る」ボタン使用時の有効期限切れ表示を抑制する. * * @access protected * @return void */ function allowClientCache() { session_cache_limiter('private-no-expire'); } /** * デバック出力を行う. * * デバック用途のみに使用すること. * * @access protected * @param mixed $val デバックする要素 * @return void */ function p($val) { SC_Utils_Ex::sfPrintR($val); } // }}} // {{{ private functions /** * トランザクショントークン用の予測困難な文字列を生成して返す. * * @access private * @return string トランザクショントークン用の文字列 */ function createToken() { return sha1(uniqid(rand(), true)); } } ?> |
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |