本格改造ガイド
サポートBBSに寄せられたリクエスト等で、AshiatoLOGの改造で対応きるものを抜き出して、まとめて見ました。
「config.pl」ファイルの設定の書き換えやその他のファイル中のコメントで指示されている「プチ改造」については、それぞれのファイル中のコメントをご参照ください。ここでは、あくまで「大改造」を扱います。
(CGIの知識が必要です。初心者の方は、改造は避けたほうが賢明です。)
改造する前にAshiatoLOGが長期にわたり正常に動いていることが大前提です。
改造する際は、改造前の正常に動いているCGIファイルをバックアップして置いてください。
一文字でも間違えると、また、全角・半角、大文字・小文字の区別を間違えると動作しません。
AshiatoLOGの使用および改造に関して発生したいかなる障害も、保証いたしません。自己責任で行ってください。
Req.トクトクでパスワードが設定できない(クッキーが使えない)
Req.ユニコードの検索単語も拾いたい
Req.トクトクでホスト名を取得したい
Req.不正アクセスを検出したい
戻る
Q.無料サーバーを使っているのですが、必ずパスワード入力画面になる為「個別データ一覧表示」等が閲覧できません。
「トクトク」サーバーを使っているのですが、「config.pl」ファイルのの「$gatewd」を設定すると、クッキーは有効になっているのに、「個別データ一覧表示」ボタンを押すと、必ずパスワード入力画面になってしまい、閲覧できません。
本ページで実際に改造した結果を以下に挙げます。おそらく他の無料サーバーでも使用可能な改造ではないかと思います。
cgi-bin/access/config.plファイル
最終行
付近
|
変更前
|
1;
|
変更後
|
$tok2_cookie = "";
1;
|
cgi-bin/access/accviewsub.plファイル
24行目
付近
|
変更前 |
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
|
変更後
|
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Set-Cookie" content="$myGlobals::tok2_cookie">
|
104行目
付近
|
変更前 |
print "Set-Cookie: $str expires=$date\n";
|
変更後
|
# print "Set-Cookie: $str expires=$date\n";
$myGlobals::tok2_cookie = "$str expires=$date\n";
|
cgi-bin/access/accview.cgiファイル
151行目 付近
|
変更前
|
print "Location: $jumpfile\n\n";
|
変更後
|
# print "Location: $jumpfile\n\n";
print "Content-type: text/html\n\n"; print "<html><head><meta http-equiv=\"Refresh\" content=\"0; url=$jumpfile\"></head><body>お待ち下さい…</body></html>\n";
|
参考ページ:
トクトクFAQスレッド(CGI全般)
http://www23.tok2.com/home/FAQ/cgi1.html#Cookie
Q.「accview.cgi」の「検索単語(日本語)集計」に壊れた文字が混じっています?
「accview.cgi」の「検索単語(日本語)集計」に壊れた文字が混じっています。特に、「MSN Search」で検索した単語が全て崩れています。どういうことでしょうか。
AsiatoLOGでは、「jcode.pl」という漢字コード変換のPerlライブラリを使用していますが、これは、最近徐々にインターネットで使われだしている「ユニコード」という漢字コードを変換できません。Perl5.6以降ではユニコードを使用できるようですが、まだ普及していません。そこで、「Jcode.pm」という別のPerlライブラリを使うことで、解決します。
ただし、サーバーに「Jcode.pm」が実装されていなければ使用できません。プロバイダにご確認の上、ご改造下さい。
cgi-bin/access/accviewsub.plファイル
60行目
付近
|
変更前
|
&jcode::convert(\$value, 'sjis');
|
変更後
|
&Jcode::convert(\$value, 'sjis');
|
cgi-bin/access/accview.cgiファイル
85行目
付近
|
変更前 |
require 'jcode.pl';
|
変更後
|
use Jcode;
|
603行目
付近
|
変更前 |
&jcode::convert(\$_,'euc');
|
変更後
|
&Jcode::convert(\$_,'euc');
|
624行目
付近
|
変更前 |
&jcode::euc2sjis(\$_);
|
変更後
|
&Jcode::euc_sjis(\$_);
|
647行目
付近
|
変更前 |
&jcode::euc2sjis(\$dspLnk);
|
変更後
|
&Jcode::euc_sjis(\$dspLnk);
|
667行目
付近
|
変更前 |
&jcode::convert(*agent, 'sjis');
|
変更後
|
&Jcode::convert(*agent, 'sjis');
|
cgi-bin/access/accgate.cgiファイル
15行目
付近
|
変更前
|
require "jcode.pl";
|
変更後
|
use Jcode;
|
自分で「Jcode.pm」を実装するには、以下のようにします。
まず、Jcodeのページから最新版のJcode.pmライブラリをダウンロード、パソコン上で解凍します。
サーバー上のaccview.cgiがあるディレクトリ(フォルダ)に「lib」というディレクトリ(フォルダ)を新たに作り、パソコン上に解凍してできたJcode.pmを含むフォルダの中身全てをサブフォルダも含めて「lib」の下にFTPでアップロードしてください。(典型的には、「.../cgi-bin/access/lib/...」となる)
以下の様にaccview.cgiとaccgate.cgiファイルの先頭行のperlのpathに「-Ilib」を付け足してください。
他、Jcodeに必要な標準ライブラリ(※)がサーバーで使用できなければ、WEB等で取得して「lib」にアップロードする必要があります。
cgi-bin/access/accview.cgiファイル
1行目
付近
|
変更前
|
#!/usr/local/bin/perl
|
変更後
|
#!/usr/local/bin/perl -Ilib
|
cgi-bin/access/accgate.cgiファイル
1行目
付近
|
変更前
|
#!/usr/local/bin/perl
|
変更後
|
#!/usr/local/bin/perl -Ilib
|
※Jcodeに必要な標準ライブラリモジュール(Perl5.xxx_xxに付属しているはずです。サーバー管理者にご確認ください)
Exporter.pm
overload.pm
strict.pm
vars.pm
参考ページ:
Jcode.pm - jcode.pl の後継
http://openlab.ring.gr.jp/Jcode/index-j.html
Q.トクトクサーバーを使っているのですが、。
ホスト名が取得できません。
今使用しているサーバーは「トクトク」なんですが、ホスト名が出なくなりました。ちょっと前に大規模メンテナンスをした後からです。それまではちゃんと出ていたのですが・・・
解決できるのであれば、方法を教えて下さい。
ちなみに、お知らせのメールでこう言うのが届います。
「トクトクサーバーの環境変数 [
REMOTE_ADDR ] が使用できない問題ですが、[ HTTP_FROM ] で、代用できるようになりました。
[ HTTP_FROM ]を参照すると、クライアントのホスト名が表示されます。」 |
以下の各ファイル・各行の「REMOTE_ADDR」を全て、「HTTP_FROM」に変えてみてください。
cgi-bin/access/access.plファイル
108行目
付近
|
変更前
|
$person= $ENV{'REMOTE_ADDR'};
|
変更後
|
$person= $ENV{'HTTP_FROM'};
|
cgi-bin/access/accviewsub.plファイル
202行目
付近
|
変更前
|
{ $keywd= $ENV{'REMOTE_ADDR'};
|
変更後
|
{ $keywd= $ENV{'HTTP_FROM'};
|
cgi-bin/access/accview.cgiファイル
108行目
付近
|
変更前
|
$person= $ENV{'REMOTE_ADDR'};
|
変更後
|
$person= $ENV{'HTTP_FROM'};
|
軽量版「accimg.cgi」をお使いの場合は、以下も変更してください。
cgi-bin/access/accimg.cgiファイル
93行目
付近
|
変更前
|
$addr = $ENV{'REMOTE_ADDR'};
|
変更後
|
$addr = $ENV{'HTTP_FROM'};
|
Q.どうも、「accimg.cgi?id=xxx」で「xxx」に指定した覚えがないidのアクセスが記録されているのですが、いたずらされていないか調べられますか?
「accimg.cgi?id=xxx」で「xxx」に指定していないidのアクセスが記録されているのですが、記録されているリンクを辿ったところ、外部の第三者のページ(画像貼り付け掲示板など)から「accimg.cgi」が起動されているのではないかと疑っています。調べる方法はないでしょうか?
「HTTP_REFERER」が使えるサーバーなら、調べることが可能です。以下の改造で、「accimg.cgi」を呼び出したURLをエラーログに記録します。
以下の改造とともに、必ず、「cgi-bin/access/config.pl」中の「@myurls
= (...);」を設定してください。それによって、正規の「accimg.cgi」呼び出しをエラーログから除外します。さもないと「accimg.cgi」を呼び出したページ全てが不正アクセスとして記録されてしまいますのでご注意ください。
cgi-bin/access/access.plファイル
441行目
付近
|
変更前
|
my $rtval;
|
変更後
|
my ($rtval, $caller);
$caller = $ENV{'HTTP_REFERER'};
if ($caller and &AshiatoData::chkMyURL($caller) == 0)
{ $this->err_log("不正アクセスの疑いがあります。ID=$pageId リンク元=$caller");
return 0;
}
$ref = $caller if (!$ref);
|
戻る