Perl

Perl で、画像のサムネイルを作成してブラウザから表示させる方法

以下のサンプルファイルを image.cgi と名前を付けて保存、アクセス権を chmod +x image.cgi とかして ブラウザから http://yourname.com/image.cgi とかにアクセスすればよい。 注意点としては、このスクリプトは画像しか表示できないことである。これと一緒に HTML ファイルを表示しようと思っても、HTTP プロトコルの仕様上不可能である。なぜかというと HTTP プロトコルを通して画像を表示する場合は、すでにこのスクリプトが HTTP ヘッダとして Content-type: image/jpeg を最初に出力してブラウザが受け取っているからで、このスクリプトの中で同時に(画像を表示した後に) HTML 文書を表示させようとて Content-type: text/html を出力(print "Content-type: text/html\n\n)してもブラウザは受け付けてくれないのである。 #!/usr/bin/perl use GD;
続きを読む

Perl で、ssh でリモートのサーバにアクセスしてファイルをアップロード(SCP)する方法 (Net::SSH2)

バックアップのためにリモートのサーバにファイルをコピー(アップロード)したい。

そんな欲求が私の中に生まれた。Linux ではファイルを ssh でコピーするのに scp というコマンドがあるので、早速試してみたのは Net::SCP という Perl のモジュールなのだが、なぜかこのモジュールのメソッドにはパスワードを指定するものがない。ホスト名とユーザー名しか指定しないのだ。ではパスワードはどこにいった?

続きを読む

Perl で、SpamAssassin を使って迷惑メールを処理する。

オープンソースで迷惑メールの処理するソフトといえば SpamAssassin (直訳するとスパム暗殺者)が有名だ。何しろ spamassassin.apache.org というサイト名からも分かるとおり、Apache Foundation 謹製なのだ。

その SpamAssassin、Perl で書かれている。なので当然 Perl のライブラリが用意されており、Perl 使いの人は簡単に自身のプログラム中から呼び出すことができる。SpamAssassin 自体はメールサーバのフロントエンドで、Procmail なんかと一緒に使うことが多いだろうから、あまり自身のプログラム中から呼び出すようなことはないとは思うのだが、何かのときに役に立つかもしれないから、とりあえず以下にサンプルを載せておこう(というかこのサイトのすべての内容自体、自分のためのメモなのでご了承を)。

続きを読む

Perl で、BASIC 認証(基本認証)付きのサイトにアクセスするには?

LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。

使用するモジュール

use LWP::UserAgent;

コード

#!/usr/bin/perl use LWP::UserAgent; our $HOME_URL = 'ユーザー名とパスワード付きの URL'; our $USERNAME = '上記 URL にアクセスするためのユーザー名'; our $PASSWORD = '上記 URL にアクセスするためのパスワード'; $ua = LWP::UserAgent->new; $req = HTTP::Request->new(GET => $HOME_URL); $req->authorization_basic($USERNAME, $PASSWORD); print $ua->request($req)->as_string; 1;
続きを読む

ウェブサイト構築時のセキュリティのポイント

IPA(独立行政法人情報処理推進機構)の「安全なウェブサイトの作り方」というドキュメントは、なかなかまとまっていて、良い。すべてのウェブアプリ開発者は目を通しておくべきだ。ここではこのドキュメントから注意点をピックアップしてまとめてみた。

  1. SQL インジェクション
  2. OS コマンド・インジェクション
  3. パス名パラメータの未チェック/ディレクトリ・トラバーサル
  4. セッション・ハイジャック
  5. クロスサイト・スクリプティング
  6. クロスサイト・リクエスト・フォージェリ (CSRF)
  7. HTTP ヘッダ・インジェクション
  8. メールの第三者中継

続きを読む

Perl の参考書リスト

Updated:

2007/05/22
2006/09/22
2006/05/29
2005/02/01 00:30

続きを読む

Perl で、JavaScript と連動してサーバにアクセスログを残す方法

ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?

そのひとつが、画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。

そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。

続きを読む

Perl で、ビット処理する方法

たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。

0: 0000 1: 0001 2: 0010 3: 0011 4: 0100 5: 0101 6: 0110 7: 0111 8: 1000 9: 1001 a: 1010 b: 1011 c: 1100 d: 1101 e: 1110 f: 1111

これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。

#!/usr/bin/perl our $data = 'a'; our $BIT_LENGTH = 4; # ビットの長さ $data = hex($data); $data = pack("C", $data); my @data = unpack("C", $data); my $mask = 0x00000001; # マスク for(my $i = 1; $i <= $BIT_LENGTH; $i++) { # if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする) <pre>if( $data[0] & $mask) { # ここに(マスクにヒット)ビットが立っているときの処理を書く print "bit $i: 1\n";
} else {

    # ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";
}
$mask = $mask << 1;
}
続きを読む
Perl を購読