パスワード認証の方法と作り方 : ぺたっとPHPサンプルソースコード |
人に見られたら困るページをわざわざパスワード認証してサイトに置くなという話は置いといて。
パスワード認証と言っても、基本は単にフォームから送られてきた変数がパスワードとして用意している文字列と同じかどうかを判定するだけ。
つまり、フォームの(この辺詳しくはフォームからのデータの取得参照)
<input type="text" name="password">
で送られてきた変数を
$pass = $_POST["password"]
で受け取って、$passが正解かどうかを判定する。
まとめると
|
で、合ってればelse以下が処理されるので、そこに認証が通った場合の処理を書く。
ifのところで!=としているのは別に意味は無い。
ifの途中に処理を書くよりelse以下の最後に書くほうがあとあと分かりやすいと思ったから。
そのページ内にテキスト書いて終わりって事ならこれだけでいいのだが、
普通は違うページのリンクとかデータとかincludeしたりとかあるわけで、
そもそもそっちに見られたくない事書いてたら当たり前だが各ページでも認証しなければ意味が無い。
で、上で書いた物をそれぞれのページに書いたとしたらページ変位する度に認証画面が出てめんどくさいことこの上ない。
つまり、一度認証が通ったら他のページにも値を渡し、認証をスルーする。
簡単な方法はリンクにパスワードを持たす事だが、例えば .php?password=パスワードそのもの なんてことをしてしまったら、
無いとは思うがそのページから別サイトにリンクしてると、
相手先にバレバレとなってしまう。
ここで一時的に有効な変数を作り、それを送信する。
そのためにランダム値を得るのに使う関数は
mt_rand
これで適当な数字が生成できる。
実際には
$type = mt_rand(1000,9999);
として、$typeに1000〜9999までの4桁のランダム値を持たしている。
そしてページ内のリンクに
.php?type=$type
とすることで変数を送信、$_GETで受け取り、発行された$typeが同じであれば(ブラウザを閉じない限り当たり前だが同じ)$pass = $seikai として認証をパスできる。
仮にそのページから他サイトにリンクを貼っていたとしても、
相手方が得られるリファラーは .php?type=ランダム値 となり、
他のブラウザからその値でブラウズしても無効となる。
まとめると
|
適当にやってるので穴があるかどうかは知らない。 個人的にはやりたくないがクッキーを使ったり、対となるIDを持たすほうがいいのは言うまでもない。
当サイト「ぺたっとPHPサンプルソースコード」は、初めてPHPを触る初心者でもすぐにPHPプログラミングができる・分かるサイトです。
PHPのサンプル
0から始めるPHP
日記