warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

Perl で、.htaccess のパスワードを生成する方法

Apache の場合の基本認証(BASIC 認証)、.htaccess の仕組みで使うパスワードは Perl で生成できる。 以下のコードを実行するとユーザー名「guest」に対するパスワード「password」は、毎回違った暗号文字列が出力されるが、それでも Apache はきちんと処理する。
#!/usr/bin/perl

our $id            = 'guest';
our $password      = 'password';
our $password_file = '.htpasswd';

# Perl の crypt 関数に使える SALT の文字は a~z、A~Z、0~9、「.」と「/」
my @salt = ('a'..'z','A'..'Z','0'..'9','.','/');

#乱数初期化関数は srand
srand;

# SALT を作る。
my $seed1 = int(rand(64));
my $seed2 = int(rand(64));
my $salt = $salt[$seed1] . $salt[$seed2];

# crypt 関数の仕様は crypt(テキスト, SALT)
$crypt_password = crypt($password, $salt);

# .htpasswd ファイルに書き出す。
open(OUT, ">$password_file") || die;
print OUT "$id:$crypt_password\n";
close(OUT);

# 表示してみる。
print "$id:$crypt_password\n";
1つのパスワードに対する暗号化された文字列の種類は 4,096通りある。これは、アルファベット小文字 26 通り+アルファベット大文字 26 通り+数字 10 通り+記号 2 通り=64 通りで、SALT は 2文字で構成されるため、64×64 = 4,096 通り、ということからくる。
Apache の場合の基本認証(BASIC 認証)、.htaccess の仕組みで使うパスワードは Perl で生成できる。 以下のコードを実行するとユーザー名「guest」に対するパスワード「password」は、毎回違った暗号文字列が出力されるが、それでも Apache はきちんと処理する。
#!/usr/bin/perl

our $id            = 'guest';
our $password      = 'password';
our $password_file = '.htpasswd';

# Perl の crypt 関数に使える SALT の文字は a~z、A~Z、0~9、「.」と「/」
my @salt = ('a'..'z','A'..'Z','0'..'9','.','/');

#乱数初期化関数は srand
srand;

# SALT を作る。
my $seed1 = int(rand(64));
my $seed2 = int(rand(64));
my $salt = $salt[$seed1] . $salt[$seed2];

# crypt 関数の仕様は crypt(テキスト, SALT)
$crypt_password = crypt($password, $salt);

# .htpasswd ファイルに書き出す。
open(OUT, ">$password_file") || die;
print OUT "$id:$crypt_password\n";
close(OUT);

# 表示してみる。
print "$id:$crypt_password\n";
1つのパスワードに対する暗号化された文字列の種類は 4,096通りある。これは、アルファベット小文字 26 通り+アルファベット大文字 26 通り+数字 10 通り+記号 2 通り=64 通りで、SALT は 2文字で構成されるため、64×64 = 4,096 通り、ということからくる。

Perl で、サーバにモジュールがインストールされているか確認する方法

コマンドラインから、以下の 1行を実行する。 引数 -M と <モジュール名> の間には、スペースはいらない。
# perl -M<モジュール名> -e ''
もしモジュールがインストールされていれば何も起こらない。モジュールがインストールされていなければ Can't locate <モジュール名>.pm 云々というエラーが出る。
コマンドラインから、以下の 1行を実行する。 引数 -M と <モジュール名> の間には、スペースはいらない。
# perl -M<モジュール名> -e ''
もしモジュールがインストールされていれば何も起こらない。モジュールがインストールされていなければ Can't locate <モジュール名>.pm 云々というエラーが出る。

Perl で、Base64 のファイルをデコードして元のバイナリファイルに戻す方法

メールに添付されてきた .pdf ファイルが巨大すぎてメールサーバによって分割されて自分のところに配信された結果、Base64 のデータがバラバラに届いたケースを考える。 このような場合は Perl が活躍する。まず、バラバラになった Base64 のファイルは仕方がないのでエディタを使って手作業でくっつけて 1つのファイルにする。そのあと、以下のコマンドを実行すればよい。 使用するモジュール use MIME::Base64;
perl -MMIME::Base64 -ne 'print decode_base64($_)'
< くっつけたBase64ファイル名.txt > 出力ファイル名.pdf

(上は、すべて1行に書く)
メールに添付されてきた .pdf ファイルが巨大すぎてメールサーバによって分割されて自分のところに配信された結果、Base64 のデータがバラバラに届いたケースを考える。 このような場合は Perl が活躍する。まず、バラバラになった Base64 のファイルは仕方がないのでエディタを使って手作業でくっつけて 1つのファイルにする。そのあと、以下のコマンドを実行すればよい。 使用するモジュール use MIME::Base64;
perl -MMIME::Base64 -ne 'print decode_base64($_)'
< くっつけたBase64ファイル名.txt > 出力ファイル名.pdf

(上は、すべて1行に書く)

サイトのリンク切れの検出チェックをするには?

checkbot を利用するといいだろう。 これは Perl ベースのコマンドラインツールで、実行するとリンク切れをチェックして HTML を出力する。その HTML に書き出された検出結果をブラウザから見るという使い方。 この checkbot、UTF-8 で書かれたサイトを指定してて実行すると、 Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.7/LWP/Protocol.pm line XXX, line 1. などのエラーが出るが、気にしないでよい。実行例としては、 ./checkbot --url https://perltips.twinkle.cc/ --internal-only --ignore "\.js|hatena\.ne\.jp|\.ico" ※本当は全部 1行 のような感じで、上の例だと、https://perltips.twinkle.cc/ (このサイト)を対象にして、JavaScript のリンク (.js)、hatena.ne.jp、アイコンファイル (.ico) を無視し、サイト内だけリンク切れをチェックする、という設定である。
checkbot を利用するといいだろう。 これは Perl ベースのコマンドラインツールで、実行するとリンク切れをチェックして HTML を出力する。その HTML に書き出された検出結果をブラウザから見るという使い方。 この checkbot、UTF-8 で書かれたサイトを指定してて実行すると、 Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.7/LWP/Protocol.pm line XXX, line 1. などのエラーが出るが、気にしないでよい。実行例としては、 ./checkbot --url https://perltips.twinkle.cc/ --internal-only --ignore "\.js|hatena\.ne\.jp|\.ico" ※本当は全部 1行 のような感じで、上の例だと、https://perltips.twinkle.cc/ (このサイト)を対象にして、JavaScript のリンク (.js)、hatena.ne.jp、アイコンファイル (.ico) を無視し、サイト内だけリンク切れをチェックする、という設定である。