• 締切済み

直リンクを回避するには?

自サイト内のデータへの自サイト以外からの直接リンクが有った場合に、それをエラーページなどに飛ばす方法ご存知ありませんか? そのデータがHTMLファイルなら逃げ道はいくらでもあるんですけど、画像ファイルや動画ファイルなどの場合どうしたら良いのでしょう? 動作条件は 1)プロバイダから借りている領域なのでサーバレベルでの設定は難しい。(多分ムリ) 2).htaccessは使える。 3)データは基本的にバイナリファイル 4)Javaは使用不可 5)CGI(Perl)使用可 .htaccess を色々いじってみたりしてるんですが、自サイトからのアクセスもはじかれてしまうので悩んでます。(Redirect,RedirectMatch等)

みんなの回答

  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.4

以下の回答に追加する形で回答します。 バイナリファイルのにどうでもいいごみをくっつけ、 単体では役に立たないようにします。 そしてcgiで出力するときにそのごみを取り除くというのではだめでしょうか。 バイナリファイルを暗号化して、cgiで暗号化を解いてから吐き出すとか、 他にも方法はありますが、そこまでしなくてもいいでしょう。 cgiでバイナリファイルを送出すると、とても重い処理となります。 そこでcgiで解凍した一時ファイルを作り、 その送出はシステムに任せるというのがいいと思います。 アクセスが多いファイルなら一時ファイルを作る処理が重いので、 一時ファイル(解凍済みファイル)をチェックして、 そのファイルがすでに存在したら、 それをそのまま送出すると処理も軽くなるでしょう。 質問では何をしたいのか伏せているようなので、 具体的なアドバイスをしにくいのですが...。

noname#9414
noname#9414
回答No.3

まだいいでしょうか・・・ 次の手段ならば、直リンクを受けてもすべて TOPページにとばすことができます。 1.TOPページ(index.html)のみをHTMLファイルに  する。その他はCGIファイル。 2.その他のページは、すべてCGIで出力するように  変更する。 1つのCGIだけで出力してもいい  のですが、それをするとパラメータ処理など、  負荷がかかる可能性が高いので、別CGIにする。 3.それぞれのCGIの中で、HTTP_REFERERをチェック  して、自分の際都内から参照しているかチェック。  #これは、パターンマッチ処理でOK。 4.あとは、index.htmlやその他CGIからのリンクを  変更し直す。 これで直リンクをすべて避けることができ、自分の サイトからのアクセスはすべて大丈夫になります。 #ただし、それぞれのファイル(JPEGなど)に貼られた #直リンクは避けられないので、注意してください。 もしかしたら、うまく処理すれば、バイナリファイル でも出力できるかもしれませんね。 #そこら辺は、自分で調べてください。 ではでは☆

shigatsu
質問者

補足

回答ありがとうございます。 >#ただし、それぞれのファイル(JPEGなど)に貼られた >#直リンクは避けられないので、注意してください。 実はこれをチェックしたいんです。JPEGじゃないんですけど。 単純にデータ毎のダウンロードカウントを行いたいので、現在はCGIを一つかましてログを取っているんですが、その後に出力される(実際にはLocation出力)URL を保存すればCGI経由しないでダウンロード可能なんです。 それをなんとか回避できないかなと思っています。

noname#134955
noname#134955
回答No.2

巨大なファイルなら避けた方がいいでしょうね。 CGIがファイルを入出力している間、サーバーの資源を食っているわけですから、プロバイダーからクレームがつく恐れがあります。CGIを許可しているプロバイダーでも、多くは、「ユーザーが負荷の高すぎるCGIを動かした場合は、予告無しに削除することもある。」という一文を掲げていると思います。 ここは初心にもどり、 ☆ なぜ、外からリンクされるのを拒否したいのか? ☆ それは、ホームページに置くのに相応しいデータなのか? から考え直してはどうでしょう。インターネットという空間にものを置くというのは、基本的に、「公開する」という目的なので、インターネットの仕組みは、「できるだけ透明に公開できる」ように作られています。自分のページから見えるなら、外からリンクしても見れる、というのが、インターネットの透明性ですから。

shigatsu
質問者

補足

もうしわけありませんが、私は透明性云々ではなく、技術的な回答を期待しています。

noname#134955
noname#134955
回答No.1

私も試したわけではありませんが、sokuさんの質問と同じ方法で実現できると思います。(下の参考URL) Action の記述は、 .htaccess に行うことができます。それで、CGI(Perl)が使えるとのことなので、自分の領域へのすべてのアクセスを 1 本の CGI で処理するようにして、どこからのリンクかをチェックし制御することは、原理的には可能でしょう。 Action の対象として、 default-handler か、該当ファイルの MIME type を指定すればよいと思います。text/html へのアクセスも CGI 処理するのは、サーバーに余計な負荷をかけるので、 MIME type の指定をお奨めします。 ただし、 .htaccess で制御できる対象は、おおもとの configuration で規制できるので、プロバイダーが Action 制御を禁止している場合には、上のようなことはできません。

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=10219
shigatsu
質問者

補足

回答ありがとうございます。 >自分の領域へのすべてのアクセスを 1 本の CGI で ということは、CGIでバイナリファイルを開けて読みこんで送るってことでしょうか? メガ単位のファイルもそれで実現可能でしょうか?

関連するQ&A