ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#1639 closed defect (fixed)

ログイン後のURLに自動的に「php」とついてしまう

Reported by: kiwa Owned by: ebihara
Priority: minor Milestone: OpenPNE2.10.2
Component: その他 Version: 2.8.x & 2.10.x & 2.11.x
Keywords: OpenPNE2.8.7 OpenPNE2.11.2 Cc:

Description (last modified by ebihara)

■現象

一部の環境で、ログイン後のURLが http://example.jp/sns/php のように、末尾に「/php」が付加された状態になる。

■原因

CGI版PHPなどを使用しているサーバで、$_SERVERSCRIPT_NAME?がPHPの実行パスとなっている場合、page_o_loginのログインフォームが以下のような状態になるのが原因。

<input type="hidden" name="target_script" value="php">

■修正内容

サーバの環境に左右される $_SERVERSCRIPT_NAME? を使用せず、img.php で認証が必要なときは、img.php にリダイレクトするだけのアクション page_h_toimg にリダイレクトすることで対処。

■関連情報

http://sns.openpne.jp/?m=pc&a=page_c_topic_detail&target_c_commu_topic_id=2983 より転記

OpenPNE初心者です

あるレンタルサーバにOpenPNEの設定を行ったのですが、どこか設定がおかしかったらしく、ログイン画面からログイン後の画面に遷移するときのURLが実在しないURLが指定されてしまい表示されません。

具体的には、以下のようなURLが表示されます。

ログイン画面のアドレス : http://example.jp/sns/

ログイン後 指定されたアドレス :http://example.jp/sns/php

なぜかログイン後に /php がついてきます。

設定のどこかが悪いと思うのですが、どうしてもわかりません。
わかる方教えてもらえませんか?

ちなみに /php を削除してリロードするとしっかりログイン出来ておりログイン後の画面が出てきます。

わかりにくい文章で申し訳ありませんがよろしくお願いします

Change History (18)

comment:1 Changed 12 years ago by kiwa

Owner: changed from nobody to ebihara

再現チームでは確認できないので、開発チームで検証をお願いします

comment:2 Changed 12 years ago by ebihara

Status: newassigned

調査してみます。LaCoocanですね。

comment:3 Changed 12 years ago by ebihara

実際に借りて調査してみましたが、再現しました。

'phptype' => 'mysql', 'username' => '(データベースアカウント)', 'password' => '(パスワード)', 'hostspec' => 'mysql', 'database' => '(データベースアカウント)',

  • ファイルのアップロード
    • openpne ディレクトリに public_html/ 以外をアップロード
    • sns ディレクトリに public_html/ をアップロード
  • openpne/var/ 以下全てのパーミッションを 0777 に
  • http://(アカウント).la.coocan.jp/phpmyadmin/ にアクセス
  • 「インポート」をクリック
  • 「ファイルをインポートする」の「ファイルの場所」に「setup\sql\mysql40\install\install-2.10-create_tables.sql」を指定
  • 「ファイルをインポートする」の「ファイルの場所」に「setup\sql\mysql40\install\install-2.10-insert_data.sql」を指定
  • http://(アカウント).la.coocan.jp/sns/ にアクセス
  • 必要事項を記入し、セットアップ
  • http://co3k.la.coocan.jp/sns/ に再びアクセス
  • メールアドレスとパスワードを入力し、ログイン
  • http://co3k.la.coocan.jp/sns/php に飛んでしまう

comment:4 Changed 12 years ago by ebihara

どうも、ログイン後の遷移先(target_script)にPHPの実行パスが指定されているみたいです。

webapp/lib/auth.inc の21行目に、

        $parts = explode('/', $_SERVER['SCRIPT_NAME']);
        $_REQUEST['target_script'] = array_pop($parts);

とありますが、この$_SERVERSCRIPT_NAME?

/.php-bin/php

となっているため、$_REQUESTtarget_script?には

php

がセットされてしまいます。そのため、ログイン後に./phpに遷移してしまうようです。

$_SERVERSCRIPT_NAME?になぜこういう値が入っているのかについては、引き続き調査してみます。

comment:5 Changed 12 years ago by ebihara

Keywords: 再現待ち removed
Milestone: OpenPNE2.10.2

CGIモードでPHPが動作している場合などに、SCRIPT_NAMEがPHPの実行パスになってしまうことがあるようです。

代替として、PHP_SELFを使う方法がありますが、

  • XSS脆弱性がある
  • PHP_SELFが空になる環境がある

の二点が気がかりです。

しかしながら XSS脆弱性については、OpenPNEはデフォルトで出力時のエスケープ処理をおこなっているので、PHP_SELFが空の場合さえ考慮すれば解決するように思えます(以下のコード)。

        if (!empty($_SERVER['PHP_SELF'])) {
            $parts = explode('/', $_SERVER['PHP_SELF']);
        } else {
            $parts = explode('/', $_SERVER['SCRIPT_NAME']);
        }

ただ、PHP_SELF と SCRIPT_NAME のいずれも、サーバの環境に左右される上、詐称の危険もあるためにあまり使いたくないところではあります。使うとすれば、index.phpとimg.php以外の値を許容しない、くらいのことはする必要があるでしょう。

  1. auth.inc に頼らず、img.php 側でなんとか対処できるようにする(PHP_SELF、SCRIPT_NAMEをまったく使わない方法)
    • 例)img.php で認証が必要なときは、img.php にリダイレクトするだけのアクションにリダイレクト → ログイン → アクションから、img.php にリダイレクト
  2. $_REQUESTtarget_script? の値は、index.php か img.php のみが入るようにする(PHP_SELF、SCRIPT_NAMEを使う方法)

環境依存の問題はやっかいなので、なるべくその危険が回避できる、1.の方向で進めていきたいと思います

comment:6 Changed 12 years ago by ebihara

「img.php で認証が必要なときは、img.php にリダイレクトするだけのアクション pc_page_h_toimg にリダイレクト → ログイン → pc_page_h_toimg から、img.php にリダイレクト」するように対策をおこないました。

target_scriptを使用していたのはPC版の認証(webapp/lib/auth.inc)のみだったので、ktaiモジュールとadminモジュールに対しては対策をおこなっていません。

対応リビジョンは以下です。

comment:7 Changed 12 years ago by ebihara

Keywords: 確認中 added

comment:8 Changed 12 years ago by ogawa

Keywords: 確認中 removed

o_login.tpl から target_script が外れてません。

comment:9 Changed 12 years ago by ogawa

Keywords: OpenPNE2.8.7 added
Version: 2.10.x & 2.11.x2.8.x & 2.10.x & 2.11.x

2.8も修正してください。

comment:10 Changed 12 years ago by ebihara

今確認してみたら正常動作しなかったので、$_SERVER[ 'QUERY_STRING' ]に &a=page_h_toimg を追記する形に変更しました。

変更を加えたリビジョンは以下です。

comment:11 Changed 12 years ago by ebihara

Keywords: 確認中 added

以下のリビジョンで o_login から target_script を外しました。

2.10.x に加えた変更を、 r4752 で 2.8.x に取り込みました。

確認よろしくお願いします。

comment:12 Changed 12 years ago by ogawa

Keywords: 確認中 removed

画像認証周りが全体的におかしいので見直しかけてください。

comment:13 Changed 12 years ago by ebihara

以下のリビジョンで画像認証を見直しました。ご確認ください。

comment:14 Changed 12 years ago by ebihara

Keywords: 確認中 added

comment:15 Changed 12 years ago by ogawa

Keywords: テスト待ち added; 確認中 removed

comment:16 Changed 12 years ago by kiwa

Keywords: テスト待ち removed
Resolution: fixed
Status: assignedclosed

確認しました。OKです

comment:17 Changed 12 years ago by ebihara

Description: modified (diff)

comment:18 Changed 12 years ago by kiwa

Keywords: OpenPNE2.11.2 added
Note: See TracTickets for help on using tickets.