バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > DirectoryIndex index な環境で管理画面にログインできない

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mosh
投稿日時: 2013/5/15 21:07
対応状況: −−−
新米
登録日: 2013/5/15
居住地:
投稿: 3
DirectoryIndex index な環境で管理画面にログインできない
[EC-CUBE] 2.12.3
[レンタルサーバ] さくらのレンタルサーバー スタンダードプラン
[OS] FreeBSD (バージョン不明)
[PHP] 5.2.x
[データベース] MySQL5.5
[WEBサーバ] Apache 1.3.x
[ブラウザ] Firefox 17.0.6 ESR
[現象] 管理画面にログインできない。

EC-CUBE を使ってみようと思い、インストールしたところ、管理画面にログインしようとすると
「ログイン認証の有効期限切れの可能性があります。もう一度ご確認のうえ、再度ログインしてください。」というエラーになりログインできないという現象が起こりました。

私のサイトでは Multiviews を使っているため、.htaccess で

  DirectoryIndex index

という設定を行なっているのですが、これをコメントアウトすると問題は発生しなくなりました。

原因を探ろうと EC-CUBE のソースコードを調べてみたところ、
eccube-2.12.3/data/class/helper/SC_Helper_Session.php:

                if (preg_match('|^' . ROOT_URLPATH . ADMIN_DIR . $exclude . '|', $_SERVER['SCRIPT_NAME'])) {

この部分で

  ROOT_URLPATH . ADMIN_DIR . $exclude

が "/eccube/html/admin/index.php" のようになりますが、 $_SERVER['SCRIPT_NAME'] には "/eccube/html/admin/index" という拡張子が含まれないパスが設定されているためマッチせず、正しく動作しないようです。

DirectoryIndex index の設定をした場合、なぜか環境変数 SCRIPT_NAME に設定されるファイル名の拡張子がなくなってしまうようです。

例えば、.htaccess に DirectoryIndex index と書いた状態で以下のようなスクリプトを実行すると、 /hoge/index という文字列が出力されます。

  <?php
  echo $_SERVER["SCRIPT_NAME"]
  ?>

Webブラウザでアクセスする URI を admin/ で終わらせるのではなく、admin/index.php と拡張子まで含めて指定すれば、SCRIPT_NAME も admin/index.php となり正しく動作します。

なお、手元の Debian GNU/Linux unstable でも同様に試してみましたが、問題は再現しませんでした。

さくらのレンタルサーバーで使用している Apache のバグなのか、PHP のバグなのか、それとも EC-CUBE で対処すべき問題なのか分からないのですが、他に同様の原因ではまる人がいらっしゃるかもしれませんし、フォーラムにはそのような報告はまだ無いようなので、一応ご報告させていただきました。

# ところで、おせっかいかもしれませんが、preg_match に渡すパターン ROOT_URLPATH . ADMIN_DIR . $exclude は、できれば preg_quote などでエスケープした方が安全な気がします。

mosh
投稿日時: 2013/5/22 20:35
対応状況: −−−
新米
登録日: 2013/5/15
居住地:
投稿: 3
Re: DirectoryIndex index な環境で管理画面にログインできない
EC-CUBE の svn HEAD にて、上で報告した DirectoryIndex index な環境でも正しく管理画面にログインできるようになった事を確認致しました。
どうもありがとうございました。

ところで、SCRIPT_NAME 環境変数が拡張子を含まない(実在しない)パスを指していると、またどこかで SCRIPT_NAME を参照する際にいちいちそれを考慮しなければならず面倒なような気がするので、html/.htaccess に DirectoryIndex index.php と明示的に書いておくと SCRIPT_NAME が実在しないパスを指している可能性を排除でき、安全なような気がします。

--- html/.htaccess	(revision 22837)
+++ html/.htaccess	(working copy)
@@ -13,3 +13,5 @@
 php_value upload_max_filesize 5M
 #php_value post_max_size 8M
 php_flag register_globals off
+
+DirectoryIndex index.php

AMUAMU
投稿日時: 2013/5/23 0:45
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: DirectoryIndex index な環境で管理画面にログインできない
2.12.4並びに2.12.3以下への修正差分として22日にリリースされた内容では処理自体が変わっているため、同様の事象は起きないと思いますので、DirectoryIndexは特に関係無くなると思います。


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

mosh
投稿日時: 2013/5/28 14:07
対応状況: −−−
新米
登録日: 2013/5/15
居住地:
投稿: 3
Re: DirectoryIndex index な環境で管理画面にログインできない
いえいえ、そういう事ではなく、EC-CUBE の html/.htaccess で DirectoryIndex ディレクティブを明示的に指定していないと、EC-CUBE の他の部分や、サードパーティ製のプラグインなどで同様の(SCRIPT_NAME環境変数のパスが拡張子を含んでいない事に起因する)問題が発生する可能性があるのではないだろうか?と思ったのです。

あくまで「問題が起きる可能性を減らす」ということであって、現時点で実際に問題が発生する事が分かっているわけではありません。「できれば指定しておいた方がいいんじゃないかな〜。」くらいの感じです。
AMUAMU
投稿日時: 2013/5/28 14:35
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: DirectoryIndex index な環境で管理画面にログインできない
なるほどmoshさんの指摘の点、理解できました。失礼いたしました。

確かに発生する可能性を未然に抑えるためには指定があったほうが良いかもです。

一方で多様な環境で動くよう.htaccessでの記述を可能な限り減らそう、依存するのは止めようと言う試みもあるので相反するんですよね

DirectoryIndexはさすがに大抵の環境でもOKだと思いますが、ここらへんはポリシー的なものだからどうなんだろうな・・・

※今の.htaccessはphp関連の設定だけなので、ある意味すっきりしている


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は67,425名です
総投稿数は98,787件です

投稿数ランキング

1
seasoft
7333
2
AMUAMU
2712
3
468
2692
4
nanasess
2115
5
umebius
1788
6
yuh
1612
7
red
1427
8
h_tanaka
1051
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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