いつも勉強になります。(ここへの投稿かどうか迷ったのですが...)
先日当方のWebサイトで CGIカウンタのデータなどが消失しました。

index.htmlでの箇所は
<!--#exec cmd="./sub/countgif.cgi countgif"-->

下記のようにアクセスログも録っていたのですが
<!--#exec cmd="./sub/accesslog.cgi"-->

% cat accesslog.cgi
...
open(AGENT,">>$agent");
print AGENT $ENV{'HTTP_USER_AGENT'}, "\n";
close(AGENT);
...

その中のagent.logに以下の様な記録があり,それで(countgif.cntなどが)削除
されたのでは?と思われます。

% hd agent.log | jless
...
00001ff0  45 54 20 43 4c 52 20 31  2e 31 2e 34 33 32 32 3b  |ET CLR 1.1.4322;|
00002000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00004800  68 6f 6d 65 31 2f 6d 64  34 34 30 2f 70 75 62 6c  |home1/md440/publ|
00004810  69 63 5f 68 74 6d 6c 2f  73 75 62 2f 64 61 74 61  |ic_html/sub/data|
00004820  2f 63 6f 75 6e 74 67 69  66 2e 63 6e 74 00 00 00  |/countgif.cnt...|
00004830  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00004860  00 00 00 00 30 30 30 30  36 36 36 00 30 30 31 32  |....0000666.0012|
00004870  35 36 31 00 30 30 32 33  34 32 30 00 30 30 30 30  |561.0023420.0000|
00004880  30 30 30 30 30 30 36 00  31 30 33 34 30 32 36 30  |0000006.10340260|
00004890  37 35 37 00 30 31 37 34  33 33 00 20 30 00 00 00  |757.017433. 0...|
000048a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00004900  00 75 73 74 61 72 20 20  00 00 00 00 00 00 00 00  |.ustar  ........|
00004910  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00004940  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
00004950  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
00004960  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00004a00  31 33 37 31 36 0a 00 00  00 00 00 00 00 00 00 00  |13716...........|
00004a10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00004a10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
...(続く)

そこでaccesslog.cgiを以下の様に改訂しようかと思います。
...
open(AGENT,">>$agent");
$age = &length_check($ENV{'HTTP_USER_AGENT'});
print AGENT "$age\n";
close(AGENT);

sub length_check{
  my ($in) = @_;

  $in =~ tr/\x00/*/s;
  return $in;
}
...

agent.logファイルでのテストでは以下の様になります。
...*home1/md440/public_html/sub/data/countgif.cnt*0000666*0012561*0023420*\
00000000006*10340260757*017433* 0*ustar  *0000000*0000000*13716
...
しかし,これで防げるものでしょうか? 
0でのパディング(?)は「print AGENT "$age\n"」する以前に悪さをしているの
ではないでしょうか?

(サーバー側では以降 *.shtmlでのSSI動作に変更されました。またサーバーでは
-sh-2.05b$ uname -a
Linux vs05 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux
を使用しています)
-- 
                        /  Name : Dobashi Mitsuyoshi  /
                       / E-mail : [EMAIL PROTECTED] /

メールによる返信