忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP ユーザーパスワード2:ユーザーid

前回の「PHP ユーザーパスワード1:ファイルの読込み 」では、読み込むファイルには「パスワード」だけしか記載されていませんでした。今回は、パスワードリストのファイルには「ユーザーid」、「パスワード」、「クラス」の3つの項目を記載することにします。

「クラス」は、ユーザーを組み分けするために使用できます。たとえば、アクセスを拒否したいユーザーは「0」としたり、書き込みができる人を「6」にしたり、管理者を「7」とすれば、ユーザー登録した人をグループ別に管理できます。

また。「ユーザーid」と「パスワード」の2つを送信させることで、これが1つの場合よりも、「なりすまし」の危険性を小さくできます。

まず、パスワードリストのファイルを示します。「ユーザーid」「パスワード」「クラス」の間をカンマ「,」で区切っています。

[ソース]usrpwd2_list.php

<?php
a,pwda,1
b,pwdb,1
c,pwdc,1
d,pwdd,1
e,pwde,1
f,pwdf,1
g,pwdg,1
h,pwdh,1
z,pwdz,0
?>


次にphpファイルを示します。リストの1行を「,」で区切って「ユーザーid」「パスワード」「クラス」をそれぞれ$password[0],$password[1],$password[2]に格納して、それぞれ送信されたデータと条件が合うかチェックします。

[ソース]usrpwd2.php

<?php
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate");
$line=file("usrpwd2_list.php");
foreach($line as $password){
$password = str_replace("?",microtime(),$password);
$password = str_replace("\r","",$password);
$password = str_replace("\n","",$password);
$password = explode(",", $password);
if($password[0]==$_POST["usrid"]&&$password[1]==$_POST["pwd"]&&$password[2]!="0"){
$condition=1;
}
}
if($condition!=1){
header("Location:usrpwd2.html");
}
?>
<html>
<head>
<title>ユーザーパスワード2:id&パスワード</title>
</head>
<body>
$condition=<?= $condition; ?><br>
$_POST["usrid"]=<?= $_POST["usrid"]; ?><br>
$_POST["pwd"]=<?= $_POST["pwd"]; ?><br>
</body>
</html>


パスワード送信ページでは、「ユーザーid」と「パスワード」の両方を送信させます。
[ソース]usrpwd2.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>ユーザーパスワード2:id&amp;パスワード</title>
</head>
<body>
<form action='usrpwd2.php' method='post'>
ユーザーid:<input type='text' name="usrid">
パスワード:<input type='password' name="pwd">
<input type='submit' value="送信">
</form>
<p>ユーザーidとして「a,b,c,d,e,f,g,h」のいずれか、
パスワードとして「pwda」というようにユーザーidの前に「pwd」つけて送信すれば、
目的のページが見れます。</p>
<p>それ以外は、このページに戻ってきます。</p>

<p>なお、ユーザー「z」、パスワード「pwdz」は
パスワードリストに記載されていますが、
3番目のフィールドに「0」が記載されているため、条件外となります。
3番目のフィールドが「0」のものは、無効とする扱いにしています。
<p>送信先のページでは、パスワードのリストのファイルを読み込み、
これをfile関数で1行ずつ配列に格納します。
そのの1行は、「ユーザーid」「パスワード」「クラス」の3つの項目が記載されています。
送信された「ユーザーid」と「パスワード」が、共にこのファイル上の「ユーザーid」「パスワード」と一致し、
さらに「クラス」が「0」出ない場合に「条件」を「真」とします。
一致しなければ、次の配列と比較します。最後の配列までいっても値が一致しないときは「条件」に値がなく、
「偽」ということになります。
「偽」の場合には、このパスワード送信ページに戻します。</p>
<hr>
</body>
</html>



PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.