バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > 管理機能 > 指定URLからのアクセスのみ許可したい、リファラ設定

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
bysk
投稿日時: 2017/3/6 21:44
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
指定URLからのアクセスのみ許可したい、リファラ設定
指定URLからのアクセスのみ許可したい、リファラ設定

[EC-CUBE] 3.0.10
[レンタルサーバ] hetemlサーバ
[サーバーOS] Linux
[PHP] PHP 5.4.27
[データベース] MySQL 5.6.13
[WEBサーバ] Apache
[ブラウザ] Chrome/50.0.2661.102
[導入プラグインの有無] GmoPaymentGateway

[やりたい事]
ECCUBEとは別に有料会員サイトを運営しております
その会員サイトの登録者のみ商品を購入できる様にしたい。

要は会員しかアクセスできないURLからECCUBEページへリファラを掛けたいです
下記の様なイメージです

指定URLからのアクセスのみ許可したい。

例)
hoge.com/shop.php からのアクセスのみ許可

hoge.com/shop.php から以外のアクセスはテキストのみ表示
(会員サイトにログインしてhoge.com/shop.phpからアクセスして下さい)

下記のヒントは見つけたのですがイマイチどのファイルに設定すれば良いか分からずどなたかご教示頂ければ幸いです。

https://umebius.com/eccube/%E3%83%AA%E3%83%95%E3%82%A1%E3%83%A9%E3%83%BC%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%88%B6%E9%99%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/


どうぞ宜しくお願い致します。
Yuya.u
投稿日時: 2017/3/6 22:21
対応状況: −−−
半人前
登録日: 2017/3/6
居住地:
投稿: 16
Re: 指定URLからのアクセスのみ許可したい、リファラ設定
全ページに同じアクセス制限するなら、html/index.phpに通常のPHPで書けば良いのではないでしょうか。

それかEccube/Application.phpかコントローラのフックポイント使うかあたりですかね。管理者や管理画面除外するにはこっちのほうが簡単ですね。

最初に正常リファラのアクセスがあった場合はセッションにフラグを保存して、フラグがあればリファラなしで通せば良いのではないでしょうか。

会員サイトもPHPでできてるならシステムincludeしてログインしているかチェックできそうにも思いますが


----------------
PHPエンジニア。Symfony, Silexを得意としています。

EC-CUBEインテグレートパートナー。ご相談ください。

bysk
投稿日時: 2017/3/9 0:38
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: 指定URLからのアクセスのみ許可したい、リファラ設定
Yuya.u様

ご回答ありがとうございます!

色々試してみたのですがイマイチ上手くいかずに困っております。

現状、index.phpに下記の様に記述

_______________________________
session_start();

$referrer = $_SERVER['HTTP_REFERER'];
if ($referrer == "xxx.com/shop.php"){
$_SESSION['judge'] = "OK";
} else {
$_SESSION['judge'] = "NG";
}


if ( $_SESSION['judge'] == "OK"){
//OKの場合

// インストールされてなければインストーラにリダイレクト
if ($app['config']['eccube_install']) {
$app->initialize();
$app->initializePlugin();
if ($app['config']['http_cache']['enabled']) {
$app['http_cache']->run();
} else {
$app->run();
}
} else {
$location = str_replace('index.php', 'install.php', $_SERVER['SCRIPT_NAME']);
header('Location:'.$location);
exit;
}

} else {
//NGの場合
header( "Location: xxx.com/ng.php" ) ;
// 終了
exit ;
}
_______________________________


$_SESSION['judge']が"OK"の場合、通常通りトップページにアクセス許可し、"NG"の場合ng.phpにリダイレクトとゆう処理にしましたがTOPへのアクセスは成功したのですがその後TOPページ以外のページにアクセスした場合でもリダイレクトが続いてしまいます、また、管理画面にアクセスするとエラーになってしまいます。


引用:

それかEccube/Application.phpかコントローラのフックポイント使うかあたりですかね。管理者や管理画面除外するにはこっちのほうが簡単ですね。


おっしゃっていたこちらの方法に関して詳しく教えて頂けないでしょうか?
コントローラやフックポイントに関してイマイチ理解しておらず..

恐れ入りますが何卒宜しくお願い致します。
Yuya.u
投稿日時: 2017/3/9 0:56
対応状況: −−−
半人前
登録日: 2017/3/6
居住地:
投稿: 16
Re: 指定URLからのアクセスのみ許可したい、リファラ設定
引用:
$_SESSION['judge']が"OK"の場合、通常通りトップページにアクセス許可し、"NG"の場合ng.phpにリダイレクトとゆう処理にしましたがTOPへのアクセスは成功したのですがその後TOPページ以外のページにアクセスした場合でもリダイレクトが続いてしまいます、


こうしてみてはいかがでしょう。

$referrer = $_SERVER['HTTP_REFERER'];
if ($referrer == "xxx.com/shop.php" || $_SESSION['judge'] == "OK"){
$_SESSION['judge'] = "OK";
} else {
//何もしない
}


引用:
また、管理画面にアクセスするとエラーになってしまいます。

こちらは$_SERVER["REQUEST_URI"]を使って管理画面の場合はリダイレクトしないようにしてはいかがでしょうか。

フックポイントはSymfonyに慣れていないと実装が難しいのでこの方法でできるかご確認いただけないでしょうか


----------------
PHPエンジニア。Symfony, Silexを得意としています。

EC-CUBEインテグレートパートナー。ご相談ください。

bysk
投稿日時: 2017/3/9 19:26
対応状況: −−−
半人前
登録日: 2016/5/26
居住地:
投稿: 22
Re: 指定URLからのアクセスのみ許可したい、リファラ設定
Yuya.u様

ご返信ありがとうございます。

ご教示の通り記述しましたが無理の様でした..

ちなみに現状は下記の様に記述しております。

TOPはうまくいくのですが商品ページ等、下層ページには
$_SESSION['judge']の値が引き継がれずにNG処理になってしまいます。

管理画面もNGのままですね..

// 追加 ここから
session_start();

// リファラ取得
$referrer = $_SERVER['HTTP_REFERER'];

// 指定ページからアクセスの場合
if ($referrer == "xxx.com/shop.php"){
$_SESSION['judge'] = "OK";
} else {
$_SESSION['judge'] = "NG";
}


// 現状のURL取得
$_SESSION['now_url'] = $_SERVER['REQUEST_URI'];


//管理画面URL(ecadmin)が含まれている場合adminフラグ
if(strpos($_SESSION['now_url'], "ecadmin") !== false){
// echo "含まれています<br>";
$_SESSION['admin'] = "admin";
}else{
$_SESSION['admin'] = "no_admin";
}


//リファラOKと管理画面アクセスのチェック
if ( $_SESSION['judge'] == "OK" || $_SESSION['admin'] == "admin"){

//OKの場合

// インストールされてなければインストーラにリダイレクト
if ($app['config']['eccube_install']) {
$app->initialize();
$app->initializePlugin();
if ($app['config']['http_cache']['enabled']) {
$app['http_cache']->run();
} else {
$app->run();
}
} else {
$location = str_replace('index.php', 'install.php', $_SERVER['SCRIPT_NAME']);
header('Location:'.$location);
exit;
}

} else {

//NGの場合
echo "<!doctype html>";
echo "<html>";
echo "<head>";
echo "<meta charset=\"utf-8\">";
echo "</head>";
echo "<body>";
echo "<p>「会員限定Shopです。</p>";
echo "<p>ログイン後再度アクセスをお願いいたします。</p>";
echo "<br /><br /><br />";
echo "<a href=\"xxx.com/shop.php\">xxx.com/shop.php</a><br>";
echo "</body>";
echo "</html>";
}
// 追加 ここまで
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 

ログイン


EC-CUBEペイメント

統計情報

総メンバー数は19,144名です
総投稿数は79,982件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1618
4
yuh
1313
5
red
1030
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
tao_s
646


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.