会員サイトのログインシステムにおけるユーザーアクセスのコントロール方法

このQ&Aのポイント
  • 会員サイトを構成するためログインシステムを導入しました。しかし、現行のログインシステムではすべてのエリアにログインしていればアクセスできてしまうため、より細かなアクセス制御ができるシステムを求めています。
  • 現在のログインシステムでは、http://hoge.com/loginsystem.cgiでログインすると、http://hoge.com/loginsystem.cgi/index.htmlにリダイレクトされて会員エリアにアクセスできます。しかし、http://hoge.com/loginsystem.cgi/member.cgi?id=mogeのようなURLにはアクセスできないようにしたいと考えています。
  • したがって、特定のIDでログインした場合には、http://hoge.com/loginsystem.cgi/memebr.cgi?id=hogeまたはhttp://hoge.com/loginsystem.cgi/memeber/hoge/にアクセスできるようにしたいです。このようなアクセス制御を実現するためのシステム構築方法を教えていただけますか?
回答を見る
  • ベストアンサー

環境変数からIDを取得しユーザー設定へのアクセスをコントロール

会員サイトを構成するためログインシステムを導入しました。しかしそのログインシステムではブロックしているすべてのエリアにログインしていればアクセスできるためコントロールできるようなシステムを探しています。 具体的には http://hoge.com/loginsystem.cgi でログインします。 すると http://hoge.com/logingsystem.cgi/index.html にジャンプし会員エリアにアクセスします。 この場合ユーザーの環境変数でIDが取得できます。今回やりたいことは IDがhogeでログインした場合、 http://hoge.com/loginsystem.cgi/memebr.cgi?id=hoge またはhttp://hoge.com/loginsystem.cgi/memeber/hoge/ にはアクセスできるが http://hoge.com/loginsystem.cgi/member.cgi?id=moge にはアクセスできない状態です。 このようにコントロールしてくれるシステム構成はできますでしょうか? よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

非常にスパゲッティなスクリプトですが イメージとしてはこんな感じでしょうか。 実際には動きませんが(笑) <? /* ユーザー認証を行わせるスクリプト */ $loginname = $_POST['loginname'];//フォームからPOSTで渡された値。 $password = $_POST['password']; //データベースからログイン情報を読み出す。 //データベースがなければテキストファイルから読み込んで //配列処理させる。パスワードは暗号化しておいたほうがよい。 //少人数ならBASIC認証を使ったほうがシンプルかもしれませんね。 $sql = <<<EOF SELECT loginname,password FROM `userdb` where `loginname` = '$loginname'; EOF; //データベースへクエリを投げる構文を。 //PEAR系のクラスを使うとデータベースの変更にも柔軟に対応できるので○ $loginnamedb = データベースから取得したユーザーネーム $loginpassdb = データベースから取得したパスワード if($loginnamedb == $loginname || $loginpassdb == $password){ //Trueならセッション情報を記録 session_start(); $_SESSION['loginname']=$loginname; $_SESSION['password']=$password; $_SESSION['ip']=getenv("REMOTE_ADDR"); $_SESSION['login']=True; }else{ //Falseならエラーメッセージ echo "ログイン情報が違います<BR>\n"; } ?> <? /* 制限したいページの頭に */ //このスクリプトはrequire_once();で呼び出す。 if(isset($_SESSION['loginname']) || isset($_SESSION['password']) || isset($_SESSION['ip']) || $_SESSION['login'] ){ //issetでセッション変数使えたかな? //より強固にしたければここでも認証すればよい $remoteip = getenv("REMOTE_ADDR"); if(!$_SESSION['ip'] == $remoteip){ //セッション変数に登録されたipアドレスと今現在アクセスしているURLが 条件を満たしているか。 header("Location: ログインページのURL"); exit; } }else{ //情報が揃ってない場合、情報がない場合 header("Location: ログインページのURL"); exit; } ?> <? /* ログアウト */ if(session_destroy()) echo "ログアウトしました。"; }else{ echo "ログアウト処理失敗 もしくはもうログアウト済みです。"; } ?> 誰か詳しい方補足願います(--;

Intel_404
質問者

お礼

回答ありがとうございました。 ローカルの実験サーバーで試してみましたがうまくいきません。。。。やはり受注してしっかりとしたものを設置するべきなのでしょうね。 わざわざこれほどまでに書いていただきありがとうございました。

その他の回答 (2)

回答No.2

ログインで認証をするスクリプト  データベースか、データファイルからIDとPASSWORDを  引っ張り認証させ OKならセッション関数を使いアクセスを記録。  クライアントにはSIDクッキーをかませる(勝手にやってくれるが)  セッションIDを盗用された場合を考えIPアドレスを一緒に登録しておくとよい。 ログアウトスクリプト(必要なら)  セッション情報を破棄してクッキーを削除するスクリプト 制限したいページ  ページの冒頭で下記のスクリプトを読み込ませる。  セッション情報があればユーザー名を読み込み  アクセス可能なユーザー名であればコンテンツ表示。  アクセス不能な場合はエラーメッセージ。  セッション情報がなければLocationヘッダーでログインページに飛ばす。 こんな感じでしょうか。

Intel_404
質問者

お礼

再度ご回答いただきまことにありがとうございます。 > セッション情報があればユーザー名を読み込み > アクセス可能なユーザー名であればコンテンツ表示。 をどのように処理すればいいのでしょうか?

回答No.1

セッション関数を活用できますね。 ログインページでログインフラグをたて、 各ページの冒頭でID毎の処理を行う。 グループ別に処理することも可能ですね DBを活用すれば構築できると思いますよ。

Intel_404
質問者

お礼

回答ありがとうございました。 >DBを活用すれば構築できると思いますよ。 この方法を詳しく教えていただけると幸いです。

関連するQ&A

  • ユーザーコントロールの座標

    コントロール名がHogeのユーザーコントロールを作成します。 Form1にHogeを貼り付けHoge1とする。 どのようなユーザーコントロールに対してもForm1.Hoge1.Leftのような書き方ができますが、 Dim UC As Hoge UC.Leftのような書き方ができません。 後者のような参照ができないプロパティは、自分で定義したのではない、元からあるLeftとTop、Indexなどです。 このようなプロパティは、コントロールの参照の変数から、アクセスできないのでしょうか? オブジェクトはこのプロパティおよびメソッドをサポートしていませんと言われます。 オブジェクト変数が宣言されていないわけではありません。

  • 環境変数について

    ◇環境変数をセットしたい場合 WindowsXPを使っています。 コントロールパネル-システムの環境変数から設定しましたが、 ログオフや再起動しないと反映されないのでしょうか? ユーザー環境変数やシステム環境変数の違いも影響有るのでしょうか? AA C:\ PATH %AA%;として、%で括れば、登録済みの環境変数も使えるのでしょうか?

  • ユーザーIDの取得について

    現在、JBuilder+TomcatでWEBアプリを作成しています。そこで質問なのですが、サーブレットで、リクエストをしてきた人のユーザーIDを取得することはできるのでしょうか? 例えば、AさんがWindows2000のユーザーID「aaa」でログインし、IEにURLを入力してWEBアプリにアクセスしました。 この場合、サーブレット側で、AさんのユーザーIDである「aaa」を知るなんてことはできるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 入力したユーザIDの取得

    入力フォームに入力したユーザIDやパスワードを CGIで受け取ることはできるのですが、 .htaccess を利用してIDを管理している場合に、 アクセス時に出るプロンプトに入力された ユーザIDとパスワードを受け取る方法が解かりません。 このようなことが可能であれば教えていただけませんか? OSは : Solaris WEBサーバとして : Apache を使用しています。

    • ベストアンサー
    • CGI
  • 拡張子の無いファイルをHTMLとして動作させる方法

    サーバ上に拡張子の無いファイルがあり、 このファイルに直接アクセスされた場合、HTMLとして表示する為の 方法を模索しております。 現状、各ディレクトリに「拡張子の無いHTMLファイル」と 「拡張子のあるHTMLファイル」が混在しております。 例)  /hoge   index.html(拡張子のあるHTMLファイル)   moge.html(拡張子のあるHTMLファイル)   moge01(拡張子の無いHTMLファイル)   moge02(拡張子の無いHTMLファイル) InternetExplorerでアクセスすると問題なく表示されますが、 Firefoxでアクセスすると、テキストとして(ソースが)表示されてしまいます。 上記症状からMIMEタイプの設定かなと思うのですが、解決出来ておりません。 知りたい方法に関する条件としては ・「.htaccess」ファイルで設定できる方法(httpd.confはいじれない為) ・上記例の「moge01」、「moge02」の様に複数のファイルに対応できる方法 ・上記例の様に、拡張子のアリ・ナシ混在で対応できる方法 実際のアクセス方法としては、それぞれ  ・http://hogemoge.com/hoge/moge.html  ・http://hogemoge.com/hoge/moge01(or http://hogemoge.com/hoge/moge01/) の様になります。 なお、いろいろと事情があり、「手作業で拡張子を付ける」という方法は 非現実的となってしまう為、それ以外の方法でお願い致します。 以上、解決方法に心当たりのある方、宜しくお願い致します。

  • Windowsの環境変数でのプロキシ設定

    ご教示下さい。 Windowsで、コントロールパネル→システム→システムの詳細設定→環境変数の画面を開くと、 HTTP_PROXY HTTPS_PROXY のような変数と http://10.1.1.1:8080 のような値を追加できます。 この時、除外設定(プロキシサーバを介したくないIPアドレス)の追加は可能でしょうか? 可能な場合、ワイルドカード指定は可能でしょうか? Linuxですとno_proxyなるものを追加できそうなのですが…。 よろしくお願いいたします。

  • undefinedが表示されてしまう

    URLからクエリを取得し、そのクエリを表示するJavaScriptを書きました。 例えば、 http://www.hoge.com/hoge.html?hoge=moge にアクセスすると、画面上に 「hoge=moge」 と表示されます。 スクリプトコードは以下のようになっています。 <script type="text/javascript"> QueryString = location.search.split("?"); if ( QueryString.length > 0 ) { document.write(QueryString[1]); } </script> ところが、 http://www.hoge.com/hoge.html http://www.hoge.com/hoge.html? などのクエリがないURLにアクセスすると、 「undefined」 が表示されてしまいます。 これでは都合が悪いです。 undefinedを表示させないように(何も表示させないように)するにはどうすればいいでしょうか? 使用環境はWindows7/Chromeです。 よろしくお願いします。

  • IDとパスワードでユーザーページへ転送したい

    こんにちは。 ホームページでユーザーシステムみたいなのを作りたいのですが、 よくあるログイン画面のように、IDとパスワードを入力すると、 指定されたユーザーのアドレスへ転送するようにしたいのですが、 簡単にできる方法はないでしょうか?たいしたことはしないので、 とくにソース表示でパスワードとかばれてしまってもかまいません。 又、指定してないIDやパスワードを入力されたら、 「このID(パスワード)は登録されていません」みたいなことが 書いてあるページへジャンプさせます。早急に回答を!!

  • 会員サイトのユーザーIDについて

    現在、phpで会員サイトを作る勉強をしています。 最近、よくメールアドレスとパスワードを使用して 会員専用ページにログインさせているサイトを目にします。 確かに、各サイト毎に登録するようなユーザーIDは忘れやすいので、メールアドレスとパスワードの組み合わせでログインしてもらう方がユーザー側からしても良いと思いますが、 実際、メールアドレスでログイン認証している会員サイトでもユーザー側にはわからない管理用のユーザーIDというのは付与しているのでしょうか? 付与している場合、それぞれのユーザーIDが同じにならないように乱数で作成するパターンが多いのでしょうか? ユーザーIDの法則についてはサイト毎に異なるかとは思いますが、 実際、ほとんどのサイトはどのような決まりで付与しているのか気になり、質問しました。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • システム環境変数の削除の自動化(バッチ化)

    ●質問内容 システム環境変数を変更する場合(WindowsXP時)、 「スタート」⇒「設定」⇒「コントロールパネル」⇒「システム」の 「システムのプロパティ」画面の「詳細設定」タグ内の「環境変数」ボタンを 押下して「環境変数」画面にて新規/編集/削除を実施すると思います。 システム環境変数の削除を行うにあたり上記一連操作をバッチファイル 等の単純操作にて実施したいと考えているのですがどのようにすれば実現できるでしょうか? 条件は以下の通りです。 ・OSはWindowsXPもしくはWindows2000。 ・削除するシステム環境変数名は決まっている。 ・ログオン/ログインや再起動は行わずに削除情報を反映させたい。 ●質問内容補足 自分で調べた範囲ではシステム環境変数の新規/編集であれば Windows2000のリソースキット中のsetx.exeというプログラムを 利用すれば可能だということが分かりました。 このHPで言っているように削除もバッチ処理で行いたいのです。 参考HP<<http://chinpindo.blog11.fc2.com/blog-entry-61.html#more>> お手数ですがご回答頂けると幸いです。 よろしくお願いいたします。

専門家に質問してみよう