.htaccessユーザー認証用ユーザーファイル作成
#! /usr/local/bin/perl loadFormdata(); # フォームデータ取込 print qq(Content-type: text/html; charset=Shift_JIS\n\n); print<<END; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>.htaccessユーザー認証 ユーザーファイル作成</title> </head> <body> <h1 style="font-size:17px;text-align:center">.htaccessユーザー認証 ユーザーファイル作成</h1> <table align="center"> <tr> <td> END printPage(); print<<END; </td> </tr> </table> <br> <br> <a href="/">トップページへ</a><br> </body> </html> END exit; #================================================ sub printPage { my $name = $FORM{'name'}; my $pass = $FORM{'pass'}; my $file = $FORM{'file'}; my $crypt = $FORM{'crypt'}; if($name and $pass) { if($crypt) { # パスワード暗号化 my $soltset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxwz0123456789./"; my $n1 = int(rand length($soltset)); my $n2 = int(rand length($soltset)); my $salt = substr($soltset, $n1, 1) . substr($soltset, $n2, 1); $pass = crypt($pass, $salt); } $file .= $name . ":" . $pass . "\n"; } elsif($name or $pass) { print qq(<font color="#ff3333">エラー:ユーザー名とパスワードを入力してください。</font><br>\n); } $file =~ s/(\x0D\x0A)+/\n/g; print<<" END"; <form action="$ENV{'SCRIPT_NAME'}" method="POST"> ユーザー名<br> <input type="text" name="name" size="50" style="ime-mode:inactive;"><br> パスワード<br> <input type="text" name="pass" size="50" style="ime-mode:inactive;"><br> END if(!($file)) { print qq(<input type="checkbox" name="crypt" value="1" checked>暗号化する(UNIX系Apache用)); } else { print qq(<input type="hidden" name="crypt" value="$crypt">); if($crypt) { print qq(暗号化する(UNIX系Apache用)); } else { print qq(暗号化しない(Windows版Apache用)); } } print<<" END"; <br> <input type="submit" value="ユーザー追加"><br> <br> コピーしてお持ち帰りください。<br> <textarea name="file" cols="60" rows="20">$file</textarea><br> [ <a href="$ENV{'SCRIPT_NAME'}">リセット</a> ]<br> </form> END } #================================================ フォームデータ取込 sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; } }
〔 実行する 〕