バグ報告 > その他 > MyページでSSL通信していない不具合 |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
camelmasa |
投稿日時: 2009/3/15 14:26
対応状況: −−−
|
新米 登録日: 2009/3/10 居住地: 東京 投稿: 6 |
MyページでSSL通信していない不具合 インストールしたてのEC-CUBEは、Myページへ画面遷移する際SSL通信しないでMyページへ画面遷移しています。
このリンクの部分をhttpsに変えてあげれば不具合は解決しますが、デフォルトのままだとMyページ内にて、会員登録内容変更等の情報を送信時、全てhttpで送信してしまっています。 この不具合は直ぐに対応すべきだと思います。 [追記] https://〜からMyページへの画面遷移の場合は問題無いようです。 |
tao_s |
投稿日時: 2009/3/17 2:34
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 799 |
Re: MyページでSSL通信していない不具合 /data/install.phpのSSL_URLの値は何になっていますか?
ここにhttps://で始まるURLがちゃんと入っていればちゃんとSSL通信で動いたと思うのですが・・・
|
seasoft |
投稿日時: 2009/3/17 2:56
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: MyページでSSL通信していない不具合 特定バージョンでの不具合かもしれませんね。
http://xoops.ec-cube.net/modules/tinyd0/index.php?id=8 をご覧になって、環境について記述したほうが良いと思います。> camelmasa様
|
camelmasa |
投稿日時: 2009/3/17 10:00
対応状況: −−−
|
新米 登録日: 2009/3/10 居住地: 東京 投稿: 6 |
Re: MyページでSSL通信していない不具合 seasoftさん
返信有難うございます。 すみません。規則を読んでいませんでした。 下記の条件下で確認しました。 ------------------------------------------------------------------------------------------ [EC-CUBE] 2.3.4 新規インストール [レンタルサーバ] ローカルPC [OS] CentOS5.2(VMware) [PHP] 5.1.6 [データベース] MySQL 5.0.45 [WEBサーバ] Apache/2.2.3 [ブラウザ] Firefox 3.0.7 [現象] インストールしたてのEC-CUBEは、Myページへ画面遷移する際SSL通信しないでMyページへ画面遷移しています。 このリンクの部分をhttpsに変えてあげれば不具合は解決しますが、デフォルトのままだとMyページ内にて、会員登録内容変更等の情報を送信時、全てhttpで送信してしまっています。 [その他] ローカルPCにVMwareをインストールしており、その中でEC-CUBEを動作させています。mod_sslによりSSL通信しています。 ------------------------------------------------------------------------------------------ tao_sさん 返信有難うございます。 data/install.php内の定数SSL_URLはhttpsで指定しています。 define ('SSL_URL', 'https://eccube.com/'); 会員登録時の入力画面等では、きちんとhttps〜のURLになるのですが、ログイン状態でマイページに遷移した後がhttpのみの通信になります。 |
dellbell |
投稿日時: 2009/4/14 6:29
対応状況: −−−
|
半人前 登録日: 2009/1/14 居住地: 投稿: 18 |
Re: MyページでSSL通信していない不具合 私も同じ不具合で悩んでおります。
MYページへのリンクがhttp:〜/mypage/login.phpになっており、またTOPページからのログインブロックからログインする際もセキュリティー警告のポップアップがでてしまいます。 (セキュリティーで保護されていない接続へリダイレクトされようとしています) リダイレクトされるページがhttp:〜なので当然のような気がしまが・・ MYページへのリンクはhttps:〜に修正しましたが、各ページからのログインの際httpsへリダイレクトさせる方法はありますでしょうか? またこの不具合はレンタルサーバーの自動インストールを使用している為でしょうか? data/install.php内の定数は下記に設定しております。 define ('SSL_URL', 'https://〜/'); [EC-CUBE] 2.3.4 自動インストール [レンタルサーバ] 使えるネット [OS] Linux [PHP] 5.1.6 [データベース] MySQL 5.0.45 [WEBサーバ] Apache/2.2.3 (CentOS) |
seasoft |
投稿日時: 2009/4/14 7:10
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: MyページでSSL通信していない不具合 そもそも、どのタイミングで HTTPS → HTTP の遷移をするのかが、少々不明確に感じています。
同じ遷移先でも、ボタンによって HTTPS だったり HTTP だったりと。 そもそも、ログインブロックに「氏名」という個人情報がバッチリ出力されるわけですから、SSL 使いたい人は、(少なくともログイン中は)常に HTTPS の方が良い気がしている今日この頃。 > またこの不具合はレンタルサーバーの自動インストールを使用している為でしょうか? 違うと思います。 > data/install.php内の定数は下記に設定しております。 > define ('SSL_URL', 'https://〜/');
それなりに動きそうですが、実際どうなるか分からないですよ。
|
dellbell |
投稿日時: 2009/4/14 8:49
対応状況: −−−
|
半人前 登録日: 2009/1/14 居住地: 投稿: 18 |
Re: MyページでSSL通信していない不具合 コメントありがとうございます。
>そもそも、どのタイミングで HTTPS → HTTP の遷移をするのかが、少々不明確に感じています。 ログインの際はずっとhttps:〜でいこうかと思っているのですがリダイレクトさせているファイルはdata/class/pages/LC_Page.phpと思うのですが、どこを修正するとSSLにリダイレクトされますでしょうか?(ログアウトの際のリダイレクト設定も修正しなくてはなりませんか?) /** * 指定の 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; } [EC-CUBE] 2.3.4 自動インストール [レンタルサーバ] 使えるネット [OS] Linux [PHP] 5.1.6 [データベース] MySQL 5.0.45 [WEBサーバ] Apache/2.2.3 (CentOS) |
kishik |
投稿日時: 2009/4/14 10:58
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: MyページでSSL通信していない不具合 data/class/pages/LC_Page.php
を書き換えると、他のページでの通常のリダイレクト処理も SSL処理になってしまうので、あまり良くないかと思います。 $netURL = new Net_URL($url); の直後で $netURL->protocol; を調べてみて頂けませんか? これが 'http' になっているなら、 環境変数あたりがおかしいはずです。 |
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)); } } ?> |
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
はずしていたらすみません. |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |