PHPでユーザ個別ページを作ろうと思っています。通常ログイン形式を取ると思うのですが、その煩わしさを省きつつもある程度クローズされたものにしたいと思っています。


例えばMySQLデータベースのidとnameを使って、「http//:○○/page.php?id=5&name=taro」という風にすることができると思うのですが、調べてもでてきません(PHPを始めてまだ2週間ほどの素人なので、ご容赦ください)。さらにmetaタグでnoindex,nofollowにすれば、認証不要でこのURLを知っている人しかアクセスできないようにできると考えています。

その方法についてご存知の方、ご教授いただけませんでしょうか?
(参考URLなど教えていただけると幸いです)

どうぞよろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/06/14 07:01:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kent0608 No.4

回答回数220ベストアンサー獲得回数23

ポイント45pt

URLを指定することで特定のユーザのページを参照できる仕様ですと、URLを一部書き換えるだけで、第三者が任意上のユーザページを参照できる

ことになります。

例)

ttp://hogehoge/index.php?id=000001

(悪意のあるユーザ)id=000003番の情報を知りたい

ttp://hogehoge/index.php?id=000003 ←下一桁を書き換え

id以外にも、非公開のnameパラメータを付与し、idのパラメータ操作だけでは参照できないようにした場合でも

公開ニックネームから非公開のnameパラメータを予想することで、特定のURLを参照することができます。

ttp://hogehoge/index.php?id=000003&name=????

(悪意のあるユーザ)id=000003番のnameがわからないとアクセスできないな

(悪意のあるユーザ)公開プロフィールのニックネームが花子か、それならnameはhanakoに違いない

ttp://hogehoge/index.php?id=000003&name=hanako 

偶然一致すれば、アクセスが可能


簡略的に認証を実装したいのであれば、pahooさんが提案されているBASIC認証を導入するのが良いかもしれませんが

見た目や認証の挙動が、Webアプリケーションのデザインと上手くマッチしない問題があります。

PHPを始めて2週間程度ということは、まだフレームワーク導入には至っていませんよね?

Webフレームワークを活用することでセキュアなWebアプリケーションを比較的短期間で実装することができます。

車輪の再開発を避けるために、認証プラグインなどもありますので、まずは有名どころのWebフレームワークを学習されてはいかがでしょうか

http://www.phppro.jp/article/framework/framework.php

その他の回答3件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント20pt

会員サイトを構築するような場合、会員IDとパスワードの管理にMySQLが必須というわけではありません。

ログイン画面後のページも会員のみがアクセスできるように制限をかけなければならないので、セッションについて学んでください。

ログイン画面を作る」が参考になると思います。

なお、パスワードをGETで渡すことは危険なのでやめてください。インターネット上を素のままのパスワードが行き来することになり、途中でパスワードが盗まれてしまうからです。


もしPHPによるログインにこだわらないのであれば、BASIC認証(基本認証)でアクセス制限をかける方が手っ取り早いでしょう。これはWebサーバの設定によります。

Apacheであれば、「基本認証でアクセス制限をかける方法」が参考になります。


さらにmetaタグでnoindex,nofollowにすれば、認証不要でこのURLを知っている人しかアクセスできないようにできると考えています

これは、おそらくGoogle検索に引っかからないというだけで、他の検索エンジンに拾われてしまう可能性があります。方法としては、お勧めできません。

id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント19pt

>metaタグでnoindex,nofollowにすれば、

>認証不要でこのURLを知っている人しかアクセスできないようにできると考えています。


META が機能するという時点で、そのページにアクセスできているという事ですし

noindex,nofollow は「サーチエンジンへの登録をしないでくださいね」という

「お願い」ですから、相手が「お願い」を無視すれば、そのまま使われてしまいます。


ログイン形式が煩わしいという事ですが必要な処置です。 面倒という方に向けては

ログインページに「次回から自動的にログインする」などのチェックボックスを設けておいて

チェックが入っていれば cookiesにidとパスワードを保存するという処理を行えばよろしいでしょう。

使い方はあちこちで紹介されているので割愛します。

googleでphpとクッキーにて検索


さらに、ログイン情報などを外部にもらさないようにするためには、

出来れば SSL での通信に対応したサーバを用いる必要もあるでしょう。


覚える事はまだまだ多々ありますが、徐々に覚えていってください。

id:kent0608 No.4

回答回数220ベストアンサー獲得回数23ここでベストアンサー

ポイント45pt

URLを指定することで特定のユーザのページを参照できる仕様ですと、URLを一部書き換えるだけで、第三者が任意上のユーザページを参照できる

ことになります。

例)

ttp://hogehoge/index.php?id=000001

(悪意のあるユーザ)id=000003番の情報を知りたい

ttp://hogehoge/index.php?id=000003 ←下一桁を書き換え

id以外にも、非公開のnameパラメータを付与し、idのパラメータ操作だけでは参照できないようにした場合でも

公開ニックネームから非公開のnameパラメータを予想することで、特定のURLを参照することができます。

ttp://hogehoge/index.php?id=000003&name=????

(悪意のあるユーザ)id=000003番のnameがわからないとアクセスできないな

(悪意のあるユーザ)公開プロフィールのニックネームが花子か、それならnameはhanakoに違いない

ttp://hogehoge/index.php?id=000003&name=hanako 

偶然一致すれば、アクセスが可能


簡略的に認証を実装したいのであれば、pahooさんが提案されているBASIC認証を導入するのが良いかもしれませんが

見た目や認証の挙動が、Webアプリケーションのデザインと上手くマッチしない問題があります。

PHPを始めて2週間程度ということは、まだフレームワーク導入には至っていませんよね?

Webフレームワークを活用することでセキュアなWebアプリケーションを比較的短期間で実装することができます。

車輪の再開発を避けるために、認証プラグインなどもありますので、まずは有名どころのWebフレームワークを学習されてはいかがでしょうか

http://www.phppro.jp/article/framework/framework.php

  • id:kn1967
    >パスワードをGETで渡すことは危険なのでやめてください。
    >インターネット上を素のままのパスワードが行き来することになり、
    >途中でパスワードが盗まれてしまうからです。

    POSTでも素のままで行き来するという点においては同じです。
    POSTとの違いは、GETでアドレスと結びつけた状態では
    「お願い」を聞いてくれないサーチエンジンなどに
    登録されてしまう可能性があるからです。

    GETだろうとPOSTだろうと、データを盗み見られるような状況であれば
    セキュリティ的には大差ありません。
    そのため暗号化やSSLなどが必要になってくるのです。
  • id:hijk04
    (はてなにより削除しました)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません