February 04, 2005

AWStatsをバージョンアップ [ Linuxの記録 ]

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/

トラックバック
コメント
コメントする









名前、アドレスを登録しますか?