たつをの ChangeLog : 2006-05-27

言語情報処理ポータルの日替わりコラム。淡々とここ3回分を公開。
前回の公開は[2006-04-11-1]
<http://nlp.kuee.kyoto-u.ac.jp/NLP_Portal/>


■JEITAコラム(31) 2006/5/25:
「おれより14時まで〜」というようなタイトルのメールが来てました。
新手のオレオレ詐欺かと思ってしまいましたが、「これより14時まで〜」
のタイポでした。(を)

■JEITAコラム(30) 2006/5/11:
「アンビエント・ファインダビリティ-ウェブ、検索、そしてコミュニケー
ションをめぐる旅」という本を読みました。どんなに有用な情報だろうと
も検索されない、見つからなければ存在しないも同じです。ネットで情報
が氾濫している現在、この本のメインテーマである「見つけること」
「見つけられること」がますます重要になってきていますね。(を)
ref. [を] アンビエント・ファインダビリティ出版記念イベント[2006-04-27-1]


■JEITAコラム(29) 2006/4/24:
先週開催された Search Engine Strategies 2006 Conference & Expo
http://www.idg.co.jp/expo/ses/ に行ってきました。
「検索エンジンの最新動向が一同に会し、インターネットを駆使した最先
端のマーケティング戦術を享受するイベント」です。いかに検索エンジン
にひっかかりやすく良質のアクセスが多いWebページを作るか。このテー
マはいまだ熱いです。(を)
ref. [を] サーチエンジンストラテジーズ2006の様子[2006-04-21-1]

Perl の特殊変数のうち自分が使っているものだけメモ。
$0     スクリプトのファイル名
$$     プロセス番号。see "perldoc -f srand"
$^T    スクリプトの実行開始時間
$.     読み込み中の行番号(レコード番号)。例: while(<>){print $.}
$/     入力レコードのセパレータ。例: undef $/; $a = <>;
$|     バッファリングの制御。$|=1 でバッファリングなし。
$!     システムコールのエラー。例: chdir("aaa");print $! if $!;
$@     evalでのエラー。例: eval '$a=f(1)';print $@ if $@;
$,     出力フィールドの区切り。例: $,='/';@a=(1,2,3);print@a;



追記060619: 「$,」を追加。
この記事に言及しているこのブログ内の記事

プログラミング Perl 第3版 VOLUME 2 「23章 セキュリティ」より:
デーモン、サーバ、および他人のために実行されるすべてのプログラム(例えばCGIスクリプト)には、-Tスイッチを指定すべきである。
[...]
すべてのCGIスクリプトに-Tフラグを指定して実行するということは、単に良い考えであるだけではない--それは、荒野のごときインターネットで生き延びるための掟なのである。

」だそうです!!!

とはいえ、今まであまり意識してませんでした。反省。

というわけで説明。perlスクリプトの先頭を以下のようにする。
#!/usr/bin/perl -T
すると、コマンドライン引数やCGIのパラメタなどの外から来た変数をファイル名として開くときに
Insecure dependency in open while running with -T switch at ...
と教えてくれる。

実験用スクリプト a.pl:
1  #!/usr/bin/perl -T
2  use strict;
3  use warnings;
4  my $fn = shift @ARGV;
5  
6  open(F, "> $fn") or die;
7  print F "hello\n";
8  close F
実行結果(怒られる):
% ./a.pl daredemonai
Insecure dependency in open while running with -T switch at ./a.pl line 6.

回避するには掃除が必要。例えば5行目を以下のようにするとOK。
5  if ($fn =~ /^([a-z0-9]+)$/i) {$fn = $1} else {die}
ただし掃除が正しくされてるかどうかまでは感知してくれない。
つまり "-T" のチェックを通ったとしても安全性は保証されない。
とはいえリマインダーとしてだけでも十分有意義。

詳しくは perlsec の man ページ (man perlsec) を参照のこと。


追記060528: 5行目の掃除方法を修正しました (man perlsec の例に準拠)。
元は下記↓。ご指摘ありがとうございます (see b_entry.gif )。
5  $fn = $1 if ($fn =~ /^([a-z0-9]+)$/i);

HTML::Template のドキュメント(see "perldoc -t HTML::Template") の
SYNOPSIS の自分用の補足。ドキュメント読むの面倒なとき用。
そのままコピペして動くようにしてある。

■その1
#!/usr/bin/perl
use strict;
use warnings;
use HTML::Template;

my $title = "Hello, World!";
my $content;
if (rand(2) < 1) {
  $content = "Hello, Mimitako!";
}
my @list = ({key=>"One", num=>1}, {key=>"Sun", num=>3},
       {key=>"Go", num=>5}, {key=>"Mimitako", num=>8});

my @templete_ary = <DATA>;
#my $templete_txt = join('', <DATA>);
my $t = HTML::Template->new(arrayref => \@templete_ary,
#                           scalarref => \$templete_txt,
#                           die_on_bad_params => 0,
                           );
$t->param(title => $title);
$t->param(content => $content);
$t->param(list => \@list);
print $t->output();

__DATA__
T: <TMPL_VAR name=title>
C: <TMPL_IF name=content><TMPL_VAR
 name=content><TMPL_ELSE>mumumu</TMPL_IF>
L: <TMPL_LOOP name=list><TMPL_VAR
 name=key>=<TMPL_VAR name=num> </TMPL_LOOP>

■その2(associate)
#!/usr/bin/perl -T
use strict;
use warnings;
use HTML::Template;
use CGI;
my $q = CGI->new();
my @templete_ary = <DATA>;
my $t = HTML::Template->new(arrayref => \@templete_ary,
 associate => $q);
$t->param(time => $^T);
print $q->header, $t->output();

__DATA__
<html>
<body>
<form>
key = <TMPL_VAR name=key><input type="text" name="key"><br>
num = <TMPL_VAR name=num><input type="text" name="num"><br>
<input type="submit">
</form>
time:<TMPL_VAR name=time>
</body>
</html>

テンペ

2006-05-27-5 [FoodDrink]
納豆の仲間。ネバネバとにおいがないので納豆嫌いな人でもOKかと。
テンペテンペ
そのままスライス、または焦げ目が付くまで軽くあぶって醤油で食べたり、
モヤシやキャベツと炒めて食べています。
でもまあ納豆好きな私としては、普通に納豆食べればいいかな、と。

ref.
- テンペ
テンペは、煮た大豆をハイビスカスなどの葉の表面に付着しているテンペ
菌(クモノスカビ)で発酵させたインドネシアの伝統的無塩発酵食品です。
- テンペってなあに?
納豆のように「糸引き」や「におい」はなく、大豆の煮豆の味。
この記事に言及しているこのブログ内の記事

映画の予告編(動画)をブログに貼り付けてもらおうという試み。
なるほどなあ。これがブログ・マーケティングか。

TEAM of ミッション:インポッシブル
http://team.mi-3.jp/banner.html
(via http://kouno.typepad.jp/smashmedia/2006/05/team_of__70fc.html)
画像

貼ってみました。音出ます。注意。




たつをの ChangeLog
Powered by chalow