本格改造ガイド
サポート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
    ▲top

    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
    ▲top

    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'};

     
    ▲top

    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);
    ▲top

    ▲top


    戻る