Home > データ収集加工 > ACCESS REPORT
|
特長
- このシステムは、ホームページへの「アクセス解析」を行うものです。
- サンプルは以下にあります。
- ACCESS REPORTの機能的な特長は以下のとおりです。
- どこからリンクされてきたかという「リンク元情報」「ブラウザ情報」「ホスト名情報」「アクセス時間帯」等を集計し、その割合をグラフ表示します。
- オプションにより、SSIを使わず 「CGI + JavaScript」で動作するモードと、「CGI + SSI」で動作する2つのモードが可能です。
(CGI + SSIモードのほうが、より正確なリンク元、ブラウザ情報等を取得することができますが、プロバイダでSSIが利用可能であることや、フレームページでの利用ができないなどの制限があります)
- このプログラムを利用する上での利用規定です。必ず目を通しておいて下さい。プログラムをダウンロードする場合、「利用規定」に同意したものとみなします。
- 【注意】
Ver4.2以前及び「CGI+JavaScript」モード時のv5.02以前の設置方法において、クロスサイト・スクリプティングの脆弱性が発見されました。
Ver5.02以前をご利用の方はVer5.1以降にバージョンアップを行い、「CGI+JavaScript」モードでの設置時の記述タグの修正を行うようにしてください。
詳細は次のとおりです。届出者及び報告機関へは、この場を借りて御礼を申し上げます。・報告元:JPCERT/CC
・届出者:(1) 株式会社キノトロープ 富永冴樹氏(v4.2以前の脆弱性)
・届出者:(2) Masahiro YAMADA氏(CGI+JavaScriptモード時の v5.02以前の設置方法)
・脆弱性の内容:クロスサイト・スクリプティングの悪用が可能。
プログラムの入手
- 以下の書庫ファイルをダウンロードします。
- ダウンロード後、解凍 します。解凍すると以下のファイルが展開されます。
report.cgi ------------- 解析プログラム init.cgi --------------- 設定ファイル list.cgi --------------- 集計表示プログラム check.cgi -------------- 動作チェックプログラム data/log.cgi ----------- データファイル tmpl/list.html --------- 集計画面テンプレート lib/Jcode.pm ----------- コード変換モジュール [入手先] lib/CGI/Minimal.pm ----- データ受理モジュール [入手先] img/*.gif -------------- グラフ画像
プログラムの設定及び設置
- 全体のディレクトリ構成とファイル位置の設置例は以下のとおりです(かっこ内はパーミッションの設定値)。
ディレクトリ構成例
public_html / index.html (トップページ) | +-- report / report.cgi [705] | init.cgi [604] | list.cgi [705] | check.cgi [705] | +-- lib / Jcode.pm | +-- Jcode / *.* | +-- CGI / Minimal.pm 他 | +-- data / log.cgi [606] | +-- img / graph1.gif graph2.gif
- init.cgi を エディタ で開いて以下の箇所を修正します。
- $cf{pass} = '0123';
- (リスト画面を見るための入室用パスワードです。パスワード欄を空欄にすると、パスワードなしで閲覧可能になります)
- $cf{ssi} = 0;
- (「CGI + JavaScript」モードでの運用ならば 0 を、「CGI + SSI」モードであれば 1 を指定します。この指定によって、HTMLに記述するタグに違いがあるので注意します)(*1)
- $cf{maxlog} = 1000;
- (蓄積するログの最大数を指定します。これ以上大きく設定しない方が無難です)
- $cf{$rand} = 0;
- (アトランダム機能で、「0」以外を指定することで有効になります。例えば、$rand = 100; とすると、確率的に100回に1度カウントを取り、それ以外はカウント集計を行ないません) (*2)
- $cf{myurl} = 'http://www.xxx.yyy/~foo/ http://www.zzz.xx.jp/';
- (リンク元除外ページを指定します。スペースで区切ることで複数のURLも指定可能です。ここで指定したURLは「リンク元」集計から除外されます)
- $cf{deny_host} = '';
- (除外するホスト名又はIPアドレスがあれば指定します。スペースで区切ることで複数指定も指定可能です。ここで指定したホスト/IPアドレスは集計そのものから除外されます)(*3)
- $cf{ip_chk} = 0;
- (直前のIPアドレスをチェックして、重複記録を避ける機能です。この機能を行なう場合には「1」とします)
- $cf{max_ref} = 2;
$cf{max_os} = 2;
$cf{max_brz} = 2;
$cf{max_hst} = 5; - (リスト最低表示件数の指定で、上から順に「リンク元」「OS情報」「ブラウザ」「ホスト名」となります。これに満たない情報は非表示となります)
- (*1) CGI + JavaScriptモードと CGI + SSIモードの違いは以下のとおりです。
-
CGI + JavaScript CGI + SSI リンク元 JavaScriptで取得 SSIで取得 特徴 SSIの使えないプロバイダでも利用可能
フレームページで利用可能
ブラウザ情報やリンク元の取得に一部制限ありプロバイダでSSIが利用可能であることが条件
フレームページではリンク元が取得不可
ブラウザ情報やリンク元が汎用的に取得可能 - (*2) 1日のカウント数が1000回以上の人気サイトなどでは有効な機能です。
- これはログ保持件数が初期値で1000件のため、1日に1000件以上アクセスのあるサイトでは「時間帯」の集計が不均衡になるため、アトランダム機能により、1日の集計数を調整します。
例 : 1日のアクセスが3000件のサイト → $cf{rand} = 30; で設定すると、3000÷30=100件で、1日当りの集計件数は約100件となり、1000件のログを10日で更新することになり、時間帯集計などが平均化します。 - (*3) ホスト名でもIPアドレスでも指定可能です。
- ホスト名を指定するときは、ドットによる第1区切りを省略します。(例)tokyo13.example.jp → .example.jp
IPアドレスを指定するときは、ドットによる第4区切りを省略します。(例)123.45.67.891 → 123.45.67.
- report.cgi, list.cgi, check.cgi を エディタ で開いて以下の箇所を修正します。
- #!/usr/local/bin/perl
- (プロバイダで定められたPerlへのパスを指定します)
- 以上、修正が完了したら各ファイルを所定のディレクトリへFTP転送し、以下のとおり アクセス権 (パーミッション) を設定します。
ファイル名 パーミッション 転送モード 一般サーバ suEXECサーバ
CGIWrapサーバreport.cgi
list.cgi
check.cgi755 or 705 701 or 700 アスキー data/log.cgi 666 or 606 600 アスキー init.cgi 644 or 604 600 アスキー lib/*.*
tmpl/*.html- - アスキー img/graph1.gif
img/graph2.gif- - バイナリ Tips:ファイル転送の仕方は以下のページを参考にしてください。
FTP : Windows編 FTP : Macintosh編 - 以上、作業が完了したら「チェックモード」で動作チェックを行ないましょう。「check.cgi」に直接アクセスすることで、簡易的なチェックを行うことができます。なお、動作チェック後はcheck.cgiはファイル削除しておきます。
- 最後に、アクセス集計を取りたいHTMLファイル(トップページなど)の <body>〜</body>間に、タグを記述します。
【CGI + JavaScriptモードの記述例】 → $cf{ssi} = 0; のとき
<script type="text/javascript"> <!-- document.write("<img src='http://www.example.com/report/report.cgi?"); document.write(escape(document.referrer)+"' width='1' height='1'>"); // --> </script> <noscript> <img src="http://www.example.com/report/report.cgi" width="1" height="1"> </noscript>
【CGI + JavaScriptモードで、フレームページでの記述例】 → $cf{ssi} = 0; のとき
escape(document.referrer) の部分を escape(parent.document.referrer) に変更【CGI + SSIモードの記述例】 → $cf{ssi} = 1; のとき
<!--#exec cgi="./report/report.cgi"-->
- 集計リストを見る場合は、ブラウザから直接 list.cgi を指定することで見ることができます。