バージョン選択

フォーラム

メニュー

オンライン状況

19 人のユーザが現在オンラインです。 (13 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 19
もっと...

サイト内検索

バグ報告 > その他 > 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通信で動いたと思うのですが・・・


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

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様


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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://〜/');

define ('SITE_URL', 'https://〜/');
にしてしまうとか・・・ ^^;
それなりに動きそうですが、実際どうなるか分からないですよ。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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

Index: login.tpl
===================================================================
--- login.tpl	(リビジョン 17754)
+++ login.tpl	(作業コピー)
@@ -27,7 +27,7 @@
     <form name="login_form" id="login_form" method="post" action="<!--{$smarty.const.SSL_URL}-->frontparts/login_check.php" onsubmit="return fnCheckLogin('login_form')">
       <input type="hidden" name="mode" value="login" />
       <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
-      <input type="hidden" name="url" value="<!--{$smarty.server.PHP_SELF|escape}-->" />
+      <input type="hidden" name="url" value="<!--{$smarty.const.SSL_URL|sfTrimURL}--><!--{$smarty.server.PHP_SELF|escape}-->" />
       <div id="login">
         <!--{if $tpl_login}-->
         <p>ようこそ<br />


はずしていたらすみません.
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,399名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.