管理用パスワードチェックの方法

CGIテクニック集トップへ





概要

管理用パスワードファイルを読み込み保存されている暗号化されたパスワードを照合し成否を判断します。

必用な処理

  1. 管理用パスワードファイルを読み込む
  2. cryptにて入力されたテキストと保存されている暗号化パスワードを照合
  3. 値を返す

サンプルコード

 my $adminpwd = 'adminpwd.dat';
 
 if (&checkadmin($plain_pwd)){
     print "パスワードはマッチしました。";
 } else {
     print "パスワードが違います。";
 }
 
 sub checkadmin {
  my $pwd = shift;
  
  if (open(FILE,"< $adminpwd")){
    my $filepwd = <FILE>;
    close(FILE);
    my $inpwd = crypt($pwd,$filepwd);
    return ("$inpwd" eq "$filepwd");
  } else {
    print 'パスワードファイルが存在しません';
    exit;
  }
 }

コードの解説

 if (&checkadmin($plain_pwd)){
     print "パスワードはマッチしました。";
 } else {
     print "パスワードが違います。";
 }

$plain_pwdは入力フォーム等により渡されたテキスト状態のパスワード。それをcheckadminルーチンに渡し、checkadminはそのテキストが$adminpwdファイルに保存されている暗号化されたパスワードとマッチすると1を返し、マッチしなければ0を返します。

 sub checkadmin {
  my $pwd = shift;
  
  if (open(FILE,"< $adminpwd")){
    my $filepwd = <FILE>;
    close(FILE);
    my $inpwd = crypt($pwd,$filepwd);
    return ("$inpwd" eq "$filepwd");
  } else {
    print 'パスワードファイルが存在しません';
    exit;
  }
 }

管理用パスワードファイルを開き内容を変数に入力します。また、crypt関数により入力されたテキストを管理用パスワード内に埋め込まれているsaltにより暗号化し、その結果が管理用パスワードファイルより読み出した暗号化されたパスワードと同じかをチェックし、その結果を返します。crypt関数は第二引数のsaltをその文字列から自動的に検出します。最初の二文字だけ分離し渡す必用はありません。管理用パスワードファイルが存在しなければエラーメッセージを表示し終了します。

関連するCGIテクニック

パスワード暗号化ルーチン
パスワードチェックの方法
管理用パスワードの作り方