LOGIN ID Password Auto Login Register Now! Lost Password?
Xoops Q&A

ログイン時のみSSLとするやり方を教えてください。

  • ログインせずに、この質問カテゴリに投稿できません
  • Xoops Q&A ではゲスト投稿が禁止されています。登録はこちらからどうぞ
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2009-8-7 8:21
zzzzz  3rd Class 登録日: 2009-8-7   投稿数: 2
<現状>
SSLログインしようとすると、
-----------------------------------------------------------
https://ss1.coressl.jp/ドメイン名/misc.php?action=showpopups&type=ss...
(ユーザー名)さん、ようこそ。ログイン処理中です
-----------------------------------------------------------
とのポップアップ画面が開くのですが、
「ログイン処理中です」のメッセージがいつまで経っても消えず、
また、「閉じる」ボタンをクリックしてもポップアップ画面が閉じず、
結局ログインすることが出来ません。

<環境>
・CORESERVER共有SSL
・hd_full_1_0_3a新規インストール

<設定>
・extras/login.phpの$pathをXOOPS_ROOT_PATHへ書き換え、アップロード
・ユーザーモジュール一般設定(SSLに関する項目)
・mainfile.phpのXOOPS_URLを書き換え
if (isset($_SERVER['HTTP_VIA']) and $_SERVER['HTTP_VIA'] != 'off') {
define('XOOPS_URL', 'https://ss1.coressl.jp/ドメイン名');
} else {
define('XOOPS_URL', 'http://ドメイン名');
}

設定すべきところは、上記以外にもあるのでしょうか?

また、解決するために、
どの辺りをどうやって調べていけばよいか、
初心者にも分かりやすく教えていただけると、
嬉しいのですが……
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-8-11 18:38
Marijuana  Warrant Officer 登録日: 2006-10-30   投稿数: 215
mainfile.phpの書き換えがデタラメなのは置いといて、共有SSLではドメイン名が変わってしまうため動作しません。

引用:
また、解決するために、
どの辺りをどうやって調べていけばよいか、
初心者にも分かりやすく教えていただけると、
嬉しいのですが……
初心者と言っても、PHPが初心者なのか、htmlが初心者なのか、PHPはプロだけどXOOPSが初心者なのか、色々あると思いますが・・・
調べるならクッキーとかセッションとかクロスドメイン辺りを調べればわかるかと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-8-14 5:07
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
引用:

Marijuanaさんは書きました:
mainfile.phpの書き換えがデタラメなのは置いといて、共有SSLではドメイン名が変わってしまうため動作しません。
ドメインが違うだけで動かなくなる、なんてのじゃ使い物にならないですよね。

login.phpを追ってみましたが、これ、session_idをPOSTするので、クッキーのクロスドメイン問題は起きない気がします。


いずれにせよ、質問者さんのmainfile.php書き換えは余計なので、戻しておいた方が良いでしょう。
if (isset($_SERVER['HTTP_VIA']) and $_SERVER['HTTP_VIA'] != 'off') {
	define('XOOPS_URL', 'https://ss1.coressl.jp/ドメイン名');
} else {
	define('XOOPS_URL', 'http://ドメイン名');
}

ちなみに、このやり方だとセッションIDは平文で流れますが、それでもパスワードが平文で流れるのよりははるかにマシなので、SSLログインそのものに意味が無いとは思いません。

misc.php がPOST経由でセッションIDを受け取ったら、すかさずregenerateしても良いでしょうし。

今から実験してみます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-8-14 5:49
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
ざっと追ってみましたが、動かないのは当然かもしれません。

class Legacy_MiscSslloginAction

のどこかで、POST[ $xoopsModuleConfigUser['sslpost_name'] ] をセッションIDとして受け取るコードが必要なんじゃないでしょうか。

どこかに、Misc.Access を引っかける preload があるのかな、と探してみても、それらしきものも見つかりませんし。


ポップアップされたWindowが閉じないのも、セッションがつながっていないので、$xoopsUserがobjectにならず、fatalで止まっているからです。

もしかして、XCL2.1になってから、この機能を誰も使ってなかったりして?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-8-14 8:18
Marijuana  Warrant Officer 登録日: 2006-10-30   投稿数: 215
引用:
POST[ $xoopsModuleConfigUser['sslpost_name'] ] をセッションIDとして受け取るコードが必要なんじゃないでしょうか。
これがないのでクロスドメインに対応してないもんだと・・・


引用:
ポップアップされたWindowが閉じないのも、セッションがつながっていないので、$xoopsUserがobjectにならず、fatalで止まっているからです。
ドメイン変わると、window間での操作が出来なくなるため、window.opener.location.reload();で止まってると思います。
これクロスドメインだけの問題かと思っていたのですが、ドメイン同じで、http:とhttps:の違いがあるだけでもwindow間での操作が出来ないようです。

IE,FF,SafariならshowModalDialogが動くのでなんとかなるのですが、Opera,ChromeはshowModalDialogが動かないので、
grayboxを使ってみましたが、勝手にwindowが閉じないのでイマイチだったり・・・
投票数:1 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-8-14 12:20
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
引用:

Marijuanaさんは書きました:
引用:
POST[ $xoopsModuleConfigUser['sslpost_name'] ] をセッションIDとして受け取るコードが必要なんじゃないでしょうか。
これがないのでクロスドメインに対応してないもんだと・・・
いやあ、なんとなく「実装忘れ」なだけのような匂いが…
X2のコードと比較すると良く判ります。
X2はSSLサイトからセッションIDをPOSTで受け取るのもinclude/common.php でやってますが、XCL2.1にはそれに該当するコードが見つかりません。

引用:
引用:
ポップアップされたWindowが閉じないのも、セッションがつながっていないので、$xoopsUserがobjectにならず、fatalで止まっているからです。
ドメイン変わると、window間での操作が出来なくなるため、window.opener.location.reload();で止まってると思います。

う~ん。少なくともうちでは、JavaScriptエラーは出てないんですよね。
逆に、Fatalがちゃんとログに吐き出されてます。


実装忘れなんだろう、と判断して、SSLログインを機能させるためのpreloadを作ってみました。

html/modules/user/preload/SSLLogin.class.php
<?php

if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;

class User_SSLLogin extends XCube_ActionFilter {

	function preBlockFilter()
	{
		$this->mRoot->mDelegateManager->add( 'XCube_Session.SetupSessionHandler' , array( &$this , 'hook' ) ) ;
	}

	function hook()
	{
		$config_handler =& xoops_gethandler('config');
		$moduleConfigUser =& $config_handler->getConfigsByDirname('user');

		if( $moduleConfigUser['use_ssl'] == 1 && ! empty( $_POST[ $moduleConfigUser['sslpost_name'] ] ) ) {
			session_id( $_POST[ $moduleConfigUser['sslpost_name'] ] ) ;
		}
	}

}

これでうちでは機能してます。IE6やIE7でも、ちゃんとポップアップは閉じます。

SSLサイトから平文サイトにPOSTする時には当然警告らしきものが出ますが、まあそれは原理的に仕方ないですね。


# 互換モジュールにもSSLログイン関係の設定があるように見えるんですが、これってうちだけ? しかも、ユーザモジュール側の設定とは無関係だから、これじゃ混乱するだけですよね。
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-8-14 13:07
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
ついでに、バグレポートというかリクエストを一個。

login.php の90行目
    <form action="login.php" method="post">

となってますが、これだと、login.php という名前以外にできませんよね。
他のファイルとのバッティングなどで名前を変更したいケースもあると思うので、単にこれでどうでしょう?

    <form action="" method="post">

そこが空欄なのは嫌、ということであれば、basename(__FILE__) から引っ張ってくる、とか。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-8-15 8:17
zzzzz  3rd Class 登録日: 2009-8-7   投稿数: 2
GIJOEさん、ご回答いただき、ありがとうございます!

早速、SSLLogin.class.phpを設置してみたところ、
IE8、FF3.5.2で無事動作確認をすることが出来ました!

また、POSTする時に警告が出る件については、
「ログイン時のみSSLとする」やり方を選択する以上、
しょうがないかなと思ってます。

ちなみに、SSLログイン関係の設定についてですが、当初、「互換モジュール」にしかないと思い込んでいたため、「ユーザモジュール」にもあるんだと気が付くまで、結構、時間かかりました……。

最後になりますが、
今回、やりたかったことが100%出来たので、
とても満足しています。

ありがとうございました!
投票数:0 平均点:0.00

  条件検索へ


Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities