最新記事
(06/29)
(06/04)
(06/03)
(05/30)
(05/28)
|
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
|
PHP ユーザーパスワード2:ユーザーid
前回の「PHP ユーザーパスワード1:ファイルの読込み 」では、読み込むファイルには「パスワード」だけしか記載されていませんでした。今回は、パスワードリストのファイルには「ユーザーid」、「パスワード」、「クラス」の3つの項目を記載することにします。
「クラス」は、ユーザーを組み分けするために使用できます。たとえば、アクセスを拒否したいユーザーは「0」としたり、書き込みができる人を「6」にしたり、管理者を「7」とすれば、ユーザー登録した人をグループ別に管理できます。
また。「ユーザーid」と「パスワード」の2つを送信させることで、これが1つの場合よりも、「なりすまし」の危険性を小さくできます。
まず、パスワードリストのファイルを示します。「ユーザーid」「パスワード」「クラス」の間をカンマ「,」で区切っています。
[ソース]usrpwd2_list.php
次にphpファイルを示します。リストの1行を「,」で区切って「ユーザーid」「パスワード」「クラス」をそれぞれ$password[0],$password[1],$password[2]に格納して、それぞれ送信されたデータと条件が合うかチェックします。
[ソース]usrpwd2.php
パスワード送信ページでは、「ユーザーid」と「パスワード」の両方を送信させます。
[ソース]usrpwd2.php
「クラス」は、ユーザーを組み分けするために使用できます。たとえば、アクセスを拒否したいユーザーは「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&パスワード</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
この記事にコメントする