[PR]テレビ番組表
今夜の番組チェック
infoseekでのアクセスカウンター設置法−アクセスカウンター編−
Ciel Clair ― フリー CGI 配布サイトの
CALA - アクセスログ解析を例に挙げてご説明します。
↑↑サンプルのアクセスカウンターです
ダウンロードしてきて、CGIファィル(cala.cgi , indi.cgi , acs.cgi , cnt.cgi , analyze.cgi , admin.cgi)
を開けると第一行目は既に、
#!/usr/local/bin/perl
と、なっておりますので、変更の必要はないです。
次にset.cgiを開きます。
この時、「 ' 」や「 ; 」が無くなっただけで、エラーを起こしたりしますので注意してください。
---------- その他、エラーの種類と主な原因 ----------
# 500エラー
CGIファイル(またはディレクトリ)のパーミッションが違う→もう一度確認
CGIファイルの1行目(perlパス)が違う → #!/usr/local/bin/perl に変更
CGIファイルの文法がおかしい→文法チェック
間違った転送モードで転送していないか確認 → CGIファイルをアスキー(テキスト)モードで上げる
# 403エラー
CGIファイルのパーミッションが厳し過ぎる→パーミッションの数値を大きくする
# 404エラー
ファイルがサーバーに無い→アドレスの確認とファイルをアップしているか確認
---------------------------------------
$PASS_WORD = '1234'; # 管理者パスワード
※お好きな値にお換え下さい。
$PASS_KEY = 0; # 閲覧制限 ( 1:する, 0: しない )
※アクセスログは見せたくないので 1 に書き直す方が良いでしょう。
# 重複カウント設定
# 0 : 全てカウント
# -1 : 連続した同一IP はカウントしない
# 1 以上 : 指定時間内のカウントをしない
$COUNT_TYPE = 0;
※お好きな設定の数字に書き換えてください。
「連続した同一IP はカウントしない」にしたい場合は、
# 重複カウント設定
# 0 : 全てカウント
# -1 : 連続した同一IP はカウントしない
# 1 以上 : 指定時間内のカウントをしない
$COUNT_TYPE = -1;
といった感じになります。
infoseekでのファイル構成及びパーミッションです。
以下の値が使えるようです。
/cala/ (707)
│
├--- /log/ (707)
│ └--- ********.log (666) ( 自動生成 )
│
├--- /img/ (705)
│ └--- 0.gif 〜 9.gif (604)
│
├--- cala.cgi (705)
├--- indi.cgi (705)
├--- acs.cgi (705)
├--- cnt.cgi (705)
├--- analyze.cgi (705)
├--- admin.cgi (705)
│
├--- set.cgi (604)
├--- gifcat.pl (604)
├--- graph.gif (604)
│
├--- count.dat (666) ( 自動生成後にパーミッションを606と直しても良いです。 )
├--- count.log (666) ( 自動生成後にパーミッションを606と直しても良いです。 )
└--- month.log (666) ( 自動生成後にパーミッションを606と直しても良いです。 )
他のCGIの場合でも
.cgi (755) ==> (705) … 実行ファイル
.cgi (644) ==> (604) … 設定ファイル
.pl (604) … 外部読み込みファイル(jcode.plなど)
.dat または .log (666) ==> (606) … ログファイル(書き込みとかを記録するファイル)
ディレクトリ (777) ==> (707) … 一般的に言うフォルダ
という値にすることで、セキュリティーが増します。
アップロードが出来たら、カウンターを貼り付けたい場所に
以下のタグを貼り付けてください。
<script type="text/javascript">
<!--
wid = window.screen.width;
hei = window.screen.height;
clr = window.screen.colorDepth;
ref = window.parent.document.referrer;
document.write(
"<img src='./cgi-bin/cala/cala.cgi?" +
"&w=" + wid + "&h=" + hei +
"&clr=" + clr + "&ref=" + ref + "'>"
);
// -->
</script>
<noscript>
<img src="./cgi-bin/cala/cala.cgi">
</noscript>
今日や昨日のカウンターを付けたい場合は
<img src="./cgi-bin/cala/cala.cgi?type=Today"> や
<img src="./cgi-bin/cala/cala.cgi?type=Yesterday">を
貼り付けます。
あとはreadmeファイルの説明通り、
ログ解析をみるには、indi.cgi にアクセスします。
また、admin.cgi にアクセスすると管理用パネルが開きます。
管理用パネルでは、カウント数の変更や、ログファイルの保存状況を見ることができます。
改造編
infoseekではファィルのパーミッションが
.cgi (755) ==> (705) … 実行ファイル
.cgi (644) ==> (604) … 設定ファイル
.pl (604) … 外部読み込みファイル(jcode.plなど)
.dat または .log (666) ==> (606) … ログファイル(書き込みとかを記録するファイル)
ディレクトリ (777) ==> (707) … 一般的に言うフォルダ
というふうに真ん中(グループ)の値までしか省略出来ません。
またこのCGIは、ログファイルが自動生成時にパーミッションの値も666になってしまうので、
その度変更していたのでは骨が折れます。
ですから、もう少し改造して、セキュリティーをアップさせる方法も書いておくことにします。
まず改造の前に、サーバーにあるログファイルをダウンロードしておきます。
これは、誤って削除してしまわないようにするのと、
あとから名前を変更して、再度アップして使うために保存しておきたいからです。
FFFTPというFTPを使っている場合、
左側が自分のPC内(ローカル)で、右側がサーバー上のファイル群となっていますね。
ダウンロードする時は、ダウンロードしたいフォルダを左側(ローカル)上に開いておき、
ダウンロードしたいファイルをクリック&ドラッグで右から左に移動させればよいです。
次に以下のcgiファイル(indi.cgi・acs.cgi・cala.cgi・analyze.cgi・admin.cgi・set.cgi)を
テキストエディタかメモ帳で開き、
.dat ==> .cgi
.log ==> .cgi
に変更します。
ログファイルを.cgiに変換するとセキュリティー度は格段に上がります。
indi.cgi 168行目
open(IN, $LOG_FOLDER . Get_Date($time, 1) . ".log") or next;
を
open(IN, $LOG_FOLDER . Get_Date($time, 1) . ".cgi") or next;
とします。
acs.cgi 123行目
open(IN, $LOG_FOLDER . Get_Date(time-60*60*24*$i) . ".log");
を
open(IN, $LOG_FOLDER . Get_Date(time-60*60*24*$i) . ".cgi");
とします。
cala.cgi 267行目
$file = $LOG_FOLDER . Get_Date($Renewed-60*60*24*($SAVE_DAY-1)) . ".log";
を
$file = $LOG_FOLDER . Get_Date($Renewed-60*60*24*($SAVE_DAY-1)) . ".cgi";
cala.cgi 277行目
open(OUT, ">>$LOG_FOLDER" . Get_Date(time) . ".log") or Error("アクセスログ保存ファイル $LOG_FOLDER***.log に書き込むことができませんでした");
を
open(OUT, ">>$LOG_FOLDER" . Get_Date(time) . ".cgi") or Error("アクセスログ保存ファイル $LOG_FOLDER***.log に書き込むことができませんでした");
とします。
analyze.cgi 133行目
open(IN, $LOG_FOLDER . Get_Date(time-60*60*24*$i) . ".log");
を
open(IN, $LOG_FOLDER . Get_Date(time-60*60*24*$i) . ".cgi");
とします。
admin.cgi 131行目
$file = $LOG_FOLDER . Get_Date($time, 1) . ".log";
を
$file = $LOG_FOLDER . Get_Date($time, 1) . ".cgi";
admin.cgi 162行目
$file = $LOG_FOLDER . Get_Date($time, 1) . ".log";
を
$file = $LOG_FOLDER . Get_Date($time, 1) . ".cgi";
とします。
set.cgi 55行目
$COUNT_FILE = './count.dat'; # カウント数を保存するファイル
を
$COUNT_FILE = './countdat.cgi'; # カウント数を保存するファイル
とします。
set.cgi 56・57行目
$COUNT_LOG = './count.log'; # 日別のカウント数を保存するファイル
$MONTH_LOG = './month.log'; # 月別のカウント数を保存するファイル
を
$COUNT_LOG = './countlog.cgi'; # 日別のカウント数を保存するファイル
$MONTH_LOG = './month.cgi'; # 月別のカウント数を保存するファイル
とします。
これらの変更をすることにより、
/log/ フォルダ内に ********.cgi
/cala/フォルダ内に countdat.cgi・countlog.cgi・month.logがそれぞれ自動生成されます。
この方法は他の掲示板などでも応用出来ます。