たつをの ChangeLog

6 件 見つかりました。

1 2 [ 次へ ]

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

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

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



テンペ

2006-05-27-5 [飲食物]

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

ref.
- テンペ

テンペは、煮た大豆をハイビスカスなどの葉の表面に付着しているテンペ
菌(クモノスカビ)で発酵させたインドネシアの伝統的無塩発酵食品です。

- テンペってなあに?

納豆のように「糸引き」や「におい」はなく、大豆の煮豆の味。

- 納豆 テンペ

この記事に言及しているこのブログ内の記事

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>

プログラミング 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);

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: 「$,」を追加。

1 2 [ 次へ ]

たつをの ChangeLog

Powered by chalow