AWStats6.0(build 1.704)を使っていたが
AWStatsにリモートコマンド実行の脆弱性が見つかった。
yanbe.netサーバは全てBASIC認証だしSuEXECなので
大丈夫なんだけど古いのよりも新しいのということで
AWStats6.3(build 1.800)を入れてみる
ソースはおなじみの本家からとってきて
http://awstats.sourceforge.net/
早速、入れるわけだが以前のデータももちろん流用したい
なのでawstats.plがあるcgi-binの直下にある
awstats[数字].txtとDNSキャッシュしてる人は
dnscachelastupdate.txtをバックアップしとく
そしてawstats,confを適当に設定。
(6.0と6.3はほとんど同じ)
しかしこんだけでは済まないのが
日本語環境
キーワード検索などの日本語が化けてしまうのである
原因はawstats[数字].txtに保存されている月別のデータは
全てEUCでのURLエンコードをしている
しかしAWStats6.3はUTF-8でURLエンコードしている
だからそのままやると????ってなってしまう
しかしこれから先もUTF-8だろうから
表示のスクリプトを変えるより
今までのログファイルの中身を置換することにする
しかし月別ファイルなのでファイルも多いし
わざわざURLデコードしてUTF-8にエンコードするのは面倒
そういう時は得意のPerlでちょこちょこやればOK
スクリプトは以下のページにあるので
使いたい人はどうぞ。
あとはawstats.plのファイルに
use Jcode;を追加し
DecodeEncodedStringサブルーチンに
Jcode::convert(\$stringtodecode, "utf8");を追加する
*******************************************************
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/\+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
return $stringtodecode;
}
******************************************************
↓
******************************************************
sub DecodeEncodedString {
my $stringtodecode=shift;
$stringtodecode =~ tr/\+/ /s;
$stringtodecode =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/ieg;
Jcode::convert(\$stringtodecode, "utf8");
return $stringtodecode;
}
******************************************************
これで終了!
↓AIT: AWStatsログ専用文字コード変換
http://www.yanbe.net/blog/archives/000286.html
↓AWStats - Free log file analyzer for advanced statistics (GNU GPL).
http://awstats.sourceforge.net/