[MyTools.NET / CGI / T-Filesafe 0]

◆ T-Filesafe Ver 0.01 説明書

(c) Takahiro Nishida 1999/8/1



■ about...




■ index


■ 機能

 自分のページ内においてある JPEG, GIF, MIDI ファイル等を、他のページから直接リンクを張られて不正に使用されることから守るためのCGIです。ファイルはURLツリーの外に置くことになりますが、 tfsafe.cgi/<filename> というURLで今までどおり使用できます。主な特徴は以下の通り。

[index]


■ 動作環境に関する注意

 このプログラムは、アクセス制限をかけたいファイルを通常のHTMLディレクトリの外に置いて、プログラムを通してそのファイルを取得する仕組みになっています。したがって、通常のHTML用ディレクトリ(public_html等)の外にファイルを置ける環境が必要です。ユーザのホーム直下がHTML用のディレクトリになっている場合や、public_html 以外の場所にファイルを置けない場合(Biglobeなど)は使用できません。

[index]


■ ソース

(ダウンロード後、ファイル名が "-cgi.txt" となってるものを ".cgi" に変更してください)

全ファイルをまとめてダウンロード 〜 filesafe000.lzh

プログラム

[index]


インストール方法

■ インストール

※ 例として次のような環境を考える。
  プログラムの場所:/home/who/public_html/cgi-bin/filesafe
  制限するファイルを置く場所:/home/who/tfsdata
以下の説明は各自の環境に合わせて置き換えて読んで下さい。

  1. ソースからtfsafe.cgitscgi.gifの二つのファイルをダウンロードする。
    ※ ダウンロード方法はソースをダウンロードするを参照。

  2. 制限するファイルを置くディレクトリ(この例ではtfsdata)のパーミッションを707にする。

    (telnetの場合)
    % chmod 707 tfsdata

  3. tfsafe.cgi ファイルの最上部のPerlのパスを正しく設定する。
    ※ 詳しくはPerlのパスを設定するを参照。

  4. tfsafe.cgiをテキストエディタで開き、以下の変数を編集してください。

    ※注1 データファイルをプログラムと同じ場所に置く場合は $basedir=".";のままで。
    ※注2 ここの例では $rootdir = "/home/who/tfsdata"; となります。

  5. tfsafe.cgiをプログラムを置くディレクトリ (この例では /home/who/public_html/cgi-bin/filesafe とする) にFTPでアスキー転送する。パーミッションを705にする。

    (telnetの場合)
    % chmod 705 tfsafe.cgi

  6. 空ファイル config.txt を作成し、データ用ディレクトリ(この例では /home/who/tfsdata) にFTPでアスキー転送する。パーミッションを604に設定する。

    (telnetの場合)
    % chmod 604 config.txt

  7. テスト用GIFファイル (tscgi.gif) を、データ用ディレクトリ(この例では /home/who/tfsdata)にFTPでバイナリ転送する。パーミッションを604にする。

    (telnetの場合)
    % chmod 604 tscgi.gif

  8. ブラウザからtfsafe.cgiにアクセスしてみる。
     → 「Access Denied」と表示されればOK。
       ※ 上のように表示されない場合、ブラウザでアクセスするを参照して問題を解決してください。

  9. ブラウザからtfsafe.cgi/tscgi.gifにアクセスしてみる。
     → これが表示されればOK。

以上でインストールは完了です。


■ ディレクトリ構成

ディレクトリ構成は以下のようになります。($basedir="."; の場合。)
カッコ内の数字はパーミッション、<〜> はディレクトリ
+ <public_html>
|      + <cgi-bin>
|             + <filesafe>
|                    + tfsafe.cgi (705)
|
|
+ <tfsdata> (707)
       + config.txt (606)
       + tscgi.gif (604)

[index]


使い方

■ アクセス制限をかけたいファイルを置く

 制限をかけたいファイル(jpg, gif, mid 等)は、tfsdataの下にFTPして、パーミッションを604に設定して下さい。各ファイルには、
(tfsafe.cgiのURL)/<tfsdataからのパス>
というURLでアクセスできます。(URLは絶対パスでも相対パスでもいいです。)

 tfsdata の下にディレクトリを作ることもできます。その場合、新しく作ったディレクトリのパーミッションは707にして下さい。

■ 例 ■
tfsafe.cgi が、http://www.foo.com/~who/cgi-bin/filesafe/tfsafe.cgi に、
tfsdata が、/home/who/tfsdata/ にある場合。

・画像 /home/who/tfsdata/title.gif を表示させたいとき
<IMG SRC="http://www.foo.com/~who/cgi-bin/filesafe/tfsafe.cgi/title.gif">

・/home/who/tfsdata/midi/archive/data.lzh にリンクを張るとき
<A HREF="http://www.foo.com/~who/cgi-bin/filesafe/tfsafe.cgi/midi/archive/data.lzh">

[index]


■ 制限ルールの設定方法 〜 config.txt

 アクセス制限は、config.txt を編集することによって条件を設定することができます。config.txt の文法は次のようになります。

[allow|deny] from [URL|ADDR|HOST] <keyword>

  1. 特定のURLからのリンクのみを許可する
    allow from URL <URL>
    (例) allow from URL http://www.mypage.com/

  2. 特定のURLからのリンクをできなくする
    deny from URL <URL>
    (例) deny from URL http://www.crack.com/

  3. 特定のIPアドレスの人のアクセスのみを許可する
    allow from ADDR <IP-Address>
    (例) allow from ADDR 123.124.125

  4. 特定のIPアドレスの人のアクセスをできなくする
    deny from ADDR <IP-Address>
    (例) deny from ADDR 231.232.233.234

  5. 特定のホストの人のアクセスのみを許可する
    allow from HOST <HOST-NAME>
    (例) allow from HOST biglobe

  6. 特定のホストの人のアクセスをできなくする
    deny from HOST <HOST-NAME>
    (例) deny from HOST crack

[index]


■ 複数の条件を組み合わせる

 以下のように記述することによって、複数の条件をつけることもできます。
allow from URL http://www2s.biglobe.ne.jp/~tnishida/
allow from URL http://www5.big.or.jp/~nishida/
deny from HOST crack

 → http://www2s.biglobe.ne.jp/~tnishida/http://www5.big.or.jp/~nishida/ からのリンクを辿ってきた場合のみアクセスを許可するが、ホスト名に crack を含む場合は不許可。

■ 注意 ■
 URL, ADDR, HOST それぞれについて、allow を設定すると、allow に記述されていない URL, ADDR, HOST からのアクセスは全て不許可になります。すなわち、allow がある場合、同じ情報に関する deny が無意味になります。

(例)
allow from URL http://www2s.biglobe.ne.jp/~tnishida/
deny from URL http://www.crack.com/
→ 一行目の allow で、http://www2s.biglobe.ne.jp/~tnishida/ 以外からのリンクは全て不許可になるので、結局2行目の deny は無意味。

[index]


■ URL, ADDR, HOST が不明な場合の条件を設定する

 次のような場合、リンク元のURLが不明になります。  又、場合によってはIPアドレスやホスト名が不明になる場合もあります。各情報が不明な場合の条件を設定するには、:unknown: という keyword を使います。

※ MIDI を EMBED タグで貼り付けている場合は、allow from URL :unknown: を設定しないと演奏されません。詳しくは、EMBEDタグはリンク元が残りません!を参照。

[index]


■ エラーIDの意味

 tfsafe.cgi によってアクセスが拒否された場合、「Access Denied.」の文字とともに、拒否された理由が error ID として表示されます。error ID の意味は次の通りです。

 error IDは、エラーログにも記録されます。

[index]


■ アクセスログ、エラーログを取る

 tfsafe.cgi を通してファイルにアクセスしてきた人のログを取ることができます。$basedir で指定したディレクトリ ($basedir="."; の場合は、tfsafe.cgi と同じディレクトリ)に、access.txt という名前の空ファイルをFTPして、パーミッションを606にして下さい。そのファイルの中にアクセスログが記録されるようになります。記録される内容は、日時、ファイル名、リンク元URL、アクセスした人のIPアドレスとホスト名です。

   → アクセスログの例

 又、tfsafe.cgi によってアクセスを拒否された人のログを取ることができます。$basedir で指定したディレクトリ ($basedir="."; の場合は、tfsafe.cgi と同じディレクトリ)に、errors.txt という名前の空ファイルをFTPして、パーミッションを606にして下さい。そのファイルの中にエラーログが記録されるようになります。記録される内容は、日時、エラーID、ファイル名、リンク元URL、アクセスした人のIPアドレスとホスト名です。エラーIDの意味はこちら

   → エラーログの例

[index]


■ 扱えるファイルタイプを増やす

 T-FileSafe は、デフォルトで拡張子が gif, jpg, mid, txt, html, htm, lzh, zip のものを扱うことができます。他の種類のファイル(ra, wav等)にも使えるようにしたい場合、tfsafe.cgi の下の方にある set_mime_header 関数 にファイルの拡張子と mime-type の関係を、以下のように記述します。

$HEAD{'<拡張子>'} = "<MIMEヘッダ>";

 各拡張子に対応する MIMEヘッダ は、Netscape Navigator 3.XX だと 「オプション - 一般の設定 - ヘルパー」で調べることができます。

※ どうしてもわからない場合は、掲示板で質問してください。

[index]


Note...

■ EMBEDタグは必ず :unknown: になるようです

 この T-FileSafe は元々、私のところにあるMIDIファイルが、他のサイトから直接リンクされてダウンロードできるようになっているのを発見し、それに対抗するために作成したものなのですが、完成させてから使ってみたら、MIDIを演奏させるために使っているタグ、<EMBED SRC="〜"> は、リンク元 (HTTP_REFERER) が記録されない、ということに気が付きました(;_;)。

 しかし、MIDIファイルにEMBEDでリンクされても演奏されるだけでダウンロードはできないし(キャッシュには残りますが)、ダウンロードさせるためには A HREF でリンクを張るしかなく、それは完全に防ぐことができるので、よしとすることにしました。

 ですから、MIDI等の、EMBED と A HREF の両方で呼び出す可能性のあるファイルの場合、「allow from URL :unknown:」の条件を config.txt に加えておかないと、EMBED で再生できなくなるので注意してください。

▼ 参照 ▼
allow from URL http://www2s.biglobe.ne.jp/~tnishida/
allow from URL http://www5.big.or.jp/~nishida/
allow from URL :unknown:
(上の二つは私の持っている二個所のURL、一番下はEMBED用にリンク元がわからない場合でも許可するため)

[index]


バージョンアップ

■ バージョン履歴

(02/2/26) 更新ミス修正
 説明ミス修正(IP -> ADDR)


[MyTools.NET / CGI / T-Filesafe 0]