特定のページからのみのアクセス

このQ&Aのポイント
  • PHPで制作しているウェブページにおいて、特定のページからのみアクセスを許可する方法について教えてください。
  • ページ1で入力したIDの値をページ3まで渡し、URLを直接入力しても閲覧できないようにする方法について教えてください。
  • セッションやクッキーを使用せずに、ページ2を経由してのみページ3にアクセスできるようにする方法について教えてください。
回答を見る
  • ベストアンサー

特定のページからのみのアクセス

はじめまして、お世話になります。 現在PHPで制作を行っています。 早速質問したいのですが 例えば ページ1(サーバーA)「idとpassword入力画面」 ページ2(サーバーB)「ここにあるid&passwordで認証しokならページ3に進む」 ページ3(サーバーA)「ログイン成功画面」 この状況において ページ3の生のURLを直接打ち込んだでは閲覧できないようにして、ページ2経由でのみページ3を閲覧できるようにするにはどのようにすればよいでしょうか? 条件は ページ1で入力したidの値をページ3まで渡すということです。 セッションやクッキーはだめでした。 現在、ページ3ではURLが http://サーバーA/3.php?id=○○○○となっているため ○○○○の部分を変えれば他のidでログインできてしまいます。 $_GET['id']で一応、値は取れています。 初心者でどうすればいいのかさっぱりです。 どなたか教えていただけませんか?

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

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

サーバBに認証用の隠しページ(のようなもの)を作ってはどうでしょうか。 フォーム入力->内部でサーバBに問い合わせ→ログイン成功 $result = file_get_contents('http://serverB/api_auth.php?id=a&pass=b'); あとはログイン済みの情報をクッキーなりセッションで保持して。 セキュリティが不安ならPOSTに変えたり、idとpassを暗号化して送るとか。

hdr_tk
質問者

お礼

相当遅くなりましたが、お礼申し上げます。 idを暗号化することにしました。 ご意見有難うございました。

その他の回答 (3)

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.3

ページ1,2で使っているフォーム部分をGETからPOSTに変更すればURLにIDは表示されなくなります。 合わせて$_GETも$_POSTに変えましょう。

hdr_tk
質問者

お礼

相当遅くなりましたが、お礼申し上げます。 ご意見有難うございました。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

物理的に違うサーバーをまたいでの認証ということですか? サーバーAの画面をサーバーBで認証するということでしょうか? サーバーAとサーバーBが何かしらつながっている部分があればよいのですが、全く関係ないサーバー同士だと難しいというか無理のような気がします 例えば、webサーバーAとwebサーバーBは違うサーバーだけども、同じDBサーバーを共有している 等でなければちょっと厳しいですね

hdr_tk
質問者

お礼

相当遅くなりましたが、お礼申し上げます。 ご意見有難うございました。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 おっしゃっている内容は、普通「セッションで」実現可能かと思います。 まぁ確かに、PHPのセッション関数群は基本的に穴が多いのでセキュアにするのは大変なのですが。 そのレベルの精度を出そうとするのであれば、失礼ながら「初心者で」というレベルの方に教えるには相応の労力がかかってしまいます。 ですので、まずは一般的な「セッション関数群」か、或いはPEARのPEAR::Authあたりの使い方をきちんと学ばれる事をお勧めいたします。

hdr_tk
質問者

お礼

相当遅くなりましたが、お礼申し上げます。 ご意見有難うございました。

関連するQ&A

  • URIアクセスで認証をパスしたい。

    現在、セッションを使った認証を使っています。 ログイン画面にID,PASSWORDを入力して認証をしておりますが、 URIをメールで送信しそのURLからアクセスした場合は 認証をパスした状態でログインさせたいと思います。 どうすればこのようなことができますでしょうか。

    • 締切済み
    • PHP
  • ログイン認証のページの流れ

    こんばんは。お世話になっております。 初歩的な質問かとは思いますが、これまでlocal上、およびあるレンタルサーバ上では問題のなかったものが、今回別のサーバーをお借りしたら、以下のような不具合が出てきてしまいまいました。 タイトルのようにログインに関するもので、ロープに陥ってると・・。 メインページ(ログイン済みのみ閲覧可能) index.php <?php session_start(); if(!isset($_SESSION["id"]){ header("Location: http://***.com/login/"); }   ・   ・ /login/index.php <?php session_start(); require_once("./auth.php"); //以下、ログインが必要なページは全てここのファイルを経過させ、元のページに戻るソースを記述。 if(isset($_GET["url"])){   ・   ・ /login/auth.php <?php //ログイン入力フォームおよびDB問合せスクリプト 以上のようなファイル構成なのですが、最上位のindex.phpを訪問した際、ログインしていなかったら http://***.com/login/ に移動し、ログイン画面を表示する・・という流れを想定しておしましたが、あるサーバでは以上のようなものだとループに陥ってしまうとの障害が確認出来ました。 ローカル上、別サーバでは問題ない(目視で確認出来る障害が無いという意味)ことだったので、流れを見直そうにも的が見えてきません。 相応しくない点、可笑しな点、どんな些細な事でも結構です。お忙しい中恐縮ですが、アドバイスいただけたら幸いです。宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • セッションをつかったページについて

    メール送信フォームをPHPで作っています。 入力した値を管理するためにセッションを使っているのですが このページから、他のページに移動する際(リンクをクリック)に URLに http://www.xxxxx.co.jp/dir/?PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx のように表示されてしまいます。 できれば、 http://www.xxxxx.co.jp/dir/ のようにセッションIDは表示しないようにしたいのですが どのようにすればいいのか教えていただけないでしょうか

    • 締切済み
    • PHP
  • 現在、セッションを使用して会員用ページを作成しています。

    現在、セッションを使用して会員用ページを作成しています。 ローカル環境では問題なく作動しているのですが、 実際にアップロードしてみると実行環境では動作しません。 実行環境で、「ログイン画面」からIDとパスワードを入力→ログイン後の「メイン画面」へは通常に動作するのですが、 その後、別のページに行くと、IDのセッションだけが途切れている事が分かりました。 原因を調べているのですが、IDとパスワードでは特に違った構文にはしておらず、なぜIDだけがセッション切れしているのかが分かりません。 調べてみると、PHP.iniの設定が関係している可能性があり、 PHP.ini内の”output_buffering = Off” を On にすれば、実行できたという例がありました。 私はレンタルサーバにアップロードしているので、PHP.iniの設定を直接変更することが出来ません。 .htaccessを使用して、PHP.iniの設定を変更しようと試みているのですが、 正確には、PHPスクリプト内でini_get()関数を使用し、 値を表示してみたり、それを確認した上で、.htaccessで変更を試みていました。 こちらもローカル環境では変更できるのですが、実行環境では変更が出来ませんでした。 原因が掴めない状況です・・・。 どなたか、お知恵をお貸し下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpとmysqlでログインページの作成

    phpとmysqlを使いMAMPでログインページの作成をしようと考えています。 idやpasswordなどはもうsqlに格納されている状態を想定しています。 そこで手順を知りたいのですがこれであっているでしょうか? dbに接続してidやpasswordなどをdbから引っ張ってきて取得する。 if文でsql上のidなどとログインページに入力した情報があっているかで条件わけをする。 合っていなければエラーメッセージを返す。合っていれば次のメイン画面に飛ばす。 初歩的な質問で恥ずかしいのですがdbの情報を取得するときは「mysql_fetch_assoc」関数でいいのでしょうか。 また、ログインページのサンプルを調べているとCookie版とSession版がありますがこの違いはCookieが一定時間情報を保持するのに対してSessionはブラウザなどを閉じるとリセットという解釈で間違いないでしょうか。 文がぐちゃぐちゃで申し訳ないのですが、お暇な時にでも回答お願い致します。

    • 締切済み
    • PHP
  • セッションをログインについて

    はじめまして。 今、セッションを使ったログインのページを作っています。 流れは、 1.ログインページでIDとパスワードを入力。 2.入力したID・パスワードがあらかじめMysqlに保存してあったのと一致していたら会員ページに移動。 3.セッションにID・パスワードを保存してブラウザを閉じない限り、次回はログイン無しで会員ページに直接いけるようにする。セッションに保存されてないときはログインページにもどす。 以上の流れにそってプログラムを作りました しかし1・2は上手くいったのですが3の部分がうまくいきません。セッションにIDとパスワードを保存することができてるようなのですが、ブラウザを閉じずに、いったん別にページに行き、もう一度会員ページにもどろうとすると、ログインページ戻されてしまい、もう一度ログインしなければいけません。 以下に今回のプログラムを書きました。このプログラムのどこを直せば、いいのかお分かりになる方いらっしゃいましたらアドバイスのほうよろしくお願いします。 使用環境は PHP 5.2.5(xampp使用) MySQL 5.0.51a register_globals = Onになっています。 /*ログインページは省略しました。パスワードとユーザーIDを入力してこのページに飛びます。*/ <?php function redirect($url) { header("Location: ".$url); exit; } session_start(); /*保存していたセッションが存在するか確認なければログインのページにもどす。$_SESSION['username']) の部分を$_POST…にしたのですがそれでも結果は同じでした。*/ if(empty($_SESSION['username']) || empty($_SESSION['password'])) redirect("loginpage.php"); $user = $_POST['username']; $pass = md5($_POST['password']); /*Mysqlへ接続。セッションの問題が解決したらMysql用のクラスを作る予定です。*/ $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "******"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); /*ID・パスワードが間違ってたら、ログインページに戻す。*/ if(empty($rowCheck)) redirect("loginpage.php"); $row = mysql_fetch_array($result); /*IDとパスワードをセッションに保存*/ $_SESSION['username'] = $user; $_SESSION['password'] = $pass; if($rowCheck > 0) { while($row = mysql_fetch_array($result)) { } /*ログイン成功したら会員ページを表示。*/ echo "Login Succeeded!".$_SESSION['username'];/*←セッションに保存されてるかのテスト。ちゃんと表示されました*/ include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link1.php"); include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link3.php"); } else { /*ID・パスワードを間違えてたらログインページに戻す。*/ echo 'Incorrect login name or password. Please try again.'; redirect("loginPage.php" ); } ?>

    • ベストアンサー
    • PHP
  • PHPのセッションについて

    PHPのセッションについて 現在ログインフォームを作成しているのですが、 ログインフォームからIDとパスワードを送信して、合っていれば セッションを発行してロケーションで飛ばそうと思っているのですが、 初回時にIDとパスワードを入力して送信しても、セッションが引き継がれず 2回目以降だとセッションが引き継がれる症状に悩んでおります。 どなたかご教授ください。 宜しくお願いいたします。 【login.php】-------------------------------- <?php session_name("stock"); session_start(); $error_flag = 0; if(isset($_POST["login"])){ $id = htmlentities($_POST["id"],ENT_COMPAT); $password = trim(htmlentities($_POST["password"],ENT_COMPAT)); if($login_id == $id && $login_pass == $password){ $_SESSION["id"] = $id; $_SESSION["password"] = $password; header("Location:stock.php"); exit; }else{ $error_flag = 1; } } echo <<<EOD <form method="post" action="login.php" id="login"> <input type="text" name="id" id="id" > <input type="password" name="password" id="password"> <input type="submit" name="login" value="ログイン" /> </form> EOD; 【stock.php】--------------------------------- <?php session_name("stock"); session_start(); echo $_SESSION["id"]; echo $_SESSION["password"]; ?>

    • ベストアンサー
    • PHP
  • 軽いページを作るには

    こんばんわ! お世話になっております。 自分のサイトはphpで作っています。そこにセッションが入りurlは http://www.○○○.jp/○○.php?/phpsessid=○○○○ になります。 しかし、大手さんのサイトは ○○.php?にはならず ○○○.jp/m/セッションid/ファイル名 になってます。 これは、セッションが入る度にm/の直下にセッション用のファイルを作りいわゆるファイルが作成されてから○○分又は○時間が経過したらファイルを削除するようにしているのですか? なぜ、自分のサイトよりも取得情報が膨大なのにスムーズにページが表示されるかその仕組みが分かりません。 自サーバとか共有サーバとかの問題だけではないのかもと思いました。 /m/セッションid/ファイル名 これの仕組みを教えてください。 phpファイルは使ってないのにphpファイル以上の快適さを作るにはどうしたら。

    • ベストアンサー
    • Java
  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • 次の画面に遷移後もクッキーを取得するには

    現在PHPでクッキー認証を行っているのですが、 index.phpでまず、メニュー画面にいこうとするのですが、 $_COOKIE['id'] == "" クッキーに何もIDが入っていなかったら、もしくはIDがあっても、パスワードが間違っていたら、ログイン画面に遷移するようにし、その画面でログイン情報を入力すると、メニュー画面に遷移するというところまではいいのですが、 クッキーの情報を次の画面(例えば、test.php)に遷移するときのPHPにももたせたいのですが、次の画面ではIDがうまくとれません。 クッキーではPHPがかわると、IDもNULLになってしまうのでしょうか?

    • 締切済み
    • PHP