perlを使ったCGIによる簡単なパスワード制限の方法です。 通常CGIに使用される言語はperlですので、CGI利用可能なサーバーなら問題無く 動作すると思います。
動作サンプル(新窓で出ます)
※ perlはUNIX系OSでは標準装備となっており、システム内の処理でも多用されて います。
※ CGIの実行ファイルはパーミッション(ファイルの権限)を-rwx---r-x(705)または -rwxr-xr-x(755)にしてください。

以下ソースコードです。 HTMLの部分が少々長く感じますが非常に単純な構造です。
#!/usr/bin/perl

$script='passwd.cgi';
$password='sample';

$comment="";
print "Content-type: text/html\n\n";
&judge;
exit;

sub judge {
 if (!$ENV{"CONTENT_LENGTH"}) { &query; }
 else {
  read(STDIN,$input,$ENV{"CONTENT_LENGTH"});
  $input =~ s/^password=//g;
  if ($input eq $password) { &correct; }
  else {
   $comment="パスワードが違います";
   &query;
  }
 }
}

sub query {
print <<HTML;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>パスワード認証が必要です</title>
<style type="text/css"><!--
body { text-align: center; }
form { width: 14em; margin: 20% auto; text-align: left; }
--></style>
</head>
<body onload="document.form.password.focus();">
<form method="post" action="$script" name="form">
<p>Password: <input type="text" name="password" size="12">
<p>
<input type="submit" value="OK">
<input type="reset" value="Clear" onclick="document.form.password.focus();">
<p>$comment
</form>
</body>
</html>
HTML
}

sub correct {
print <<HTML;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="refresh" content="5; url=../perlpasswd.html">
<title>認証しました</title>
<style type="text/css"><!--
body { text-align: center; margin: 20% auto; }
--></style>
</head>
<body>
<p>正解! 5秒で移動します
<p><a href="../perlpasswd.html"> 移動しないときはこちら </a>
</body>
</html>
HTML
}

#!/usr/bin/perl は、perlスクリプトの実行ファイルである事を意味します。 perlのパスはサーバーによって異なる場合がありますので、適切なパスに変更して ください。

$script='passwd.cgi';
このCGIスクリプトのファイル名を変数$scriptにセットします。 $scriptはフォームのaction属性で指定します。

$password='sample';
変数$passwordにパスワードをセットしています。 sampleがパスワードとなりますので変更してください。
※ パスワードに使用出来る文字は半角英数字と一部の記号 -_. のみです。 その他の文字はURLエンコードされるため、このスクリプトでは利用出来ません。

$comment="";
print "Content-type: text/html\n\n";
&judge;
exit;
この辺りが一応メインルーチンですが、変数$commentに空の値を入れて初期化、 print "Content-type: text/html\n\n"; でサーバーにtext/htmlとして送信させ、 judgeというサブルーチンに飛んで終了という粗末なものです。

sub judge { } はフォームからのデータを受信し、処理を分岐するサブルーチンです。
フォームからのデータは、name属性の値=入力値 となり、データが複数の場合は&で 区切られます。今回の場合はpasswordのみですので、password=入力値 となります。
受信データが無い場合は最初の呼出と判断して、サブルーチンqueryへ飛んでパスワード 入力のフォームを生成します。
受信データが有る場合は $input =~ s/^password=//g; で、入力値に付加された余分な 部分を正規表現でカットして変数$passwordと照合し、一致する場合はサブルーチン correctへ飛びます。
また、一致しない場合は変数$commentに"パスワードが違います"をセットして サブルーチンqueryへ飛び、パスワード入力のフォームを生成します。

sub query { } はパスワード入力フォームを生成するサブルーチンです。
print <<HTML; と HTML に挟まれた部分がHTML文書として出力されます。
<p>Password: <input type="text" name="password" size="12">
パスワード入力を伏せ字にしたいときは、この行の type="text" を type="password" に変更してください。
このHTML文書中の変数$commentの部分は、パスワードが一致しなかった場合に サブルーチンjudgeでセットされた"パスワードが違います"が表示されます。

sub correct { } はパスワードが一致した場合に表示されるHTML文書を生成する サブルーチンです。
<meta http-equiv="refresh" content="5; url=../perlpasswd.html">
このmetaタグで5秒後に移動するページを指定しています。 (このサンプルでは、このページに移動します)
<p><a href="../perlpasswd.html"> 移動しないときはこちら </a>
そして、移動しないブラウザのためにハイパーリンクも用意しておきます。

この例では移動用のページを表示させていますが、勿論 sub correct { } 内の HTML部分に直接パスワード制限するページ内容を記述しても構いませんし、 フレームにして表示させても良いでしょう。
または、 sub correct { } を次のように変更すると別ファイルからページ内容を 読み込んで表示させることが出来ます。
sub correct {
 open(HTML,$page) or die print "Can't open file.";
 my $html=join("",<HTML>);
 close(HTML);
 print $html;
}
変数$pageに読み込んで表示させるためのページ内容を記述したファイル(HTML形式)を 指定しておく必要がありますが、これはスクリプト冒頭の変数$passwordの次辺りに 記入しておくと良いでしょう。
$script='passwd.cgi';
$password='sample';
$page='secret_page.html';
secret_page.htmlは適当なファイル名に変更してください。 (CGIスクリプトなどは使用出来ません)