直リンクではアクセスできないファイルdata.csvをダウンロードできるような認証ページを作りたいのですが、.htaccess編集不能なため、ベーシック認証はできませんでした。その代わりとなるようなCGIはありますか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/01 13:48:20
  • 終了:--

回答(3件)

id:NYRL No.1

NYRL回答回数14ベストアンサー獲得回数02006/02/01 14:02:40

ポイント10pt

http://homepage1.nifty.com/~heppoko/

Heppoko House Light (frame version)

ここのファイルアップロードCGIでどうでしょうか?

id:xiaotai

ちょっと高機能過ぎます。。。

CGIの勉強もかねて、シンプルなものだとありがたいのですが。

でも、これはこれで何かに使えそうなのでφ(.. )

2006/02/01 14:09:06
id:junono No.2

junono回答回数695ベストアンサー獲得回数282006/02/01 14:07:23

ポイント10pt

http://www.rescue.ne.jp/

CGI RESCUE - ネットサーフレスキューWeb裏技

ここのアクセス制限内にあるCGIでパスワード制限ではどうでしょうか?

id:xiaotai

テキストやhtmlを中に埋め込んで表示するものになってしまうようなので、csvファイルを”ダウンロード”するのは無理な気がします。(ダウンロードページをアクセス制限するだけだと、csv直リンクでダウンロードできてしまうので)

2006/02/01 14:11:45
id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272006/02/01 15:08:28

ポイント150pt

変数のHTTP_REFERERを使用したサンプルです

ファイル番号で処理するので、ファイル名が漏れることもないでしょう

(ファイル名をこの例のように置換すればOKです)


#!/usr/local/bin/perl

  $mthd=$ENV{'REQUEST_METHOD'};

  local($qu,@in,$key,$val);

  if($mthd eq 'GET'){

     $qu=$ENV{'QUERY_STRING'};

  }

  elsif($mthd eq 'POST'){

     read(STDIN,$qu,$ENV{'CONTENT_LENGTH'});

  }

  *query = decode();

 #リファー取得

  $host=$ENV{'HTTP_REFERER'};

 #リファーからサイトの確認

  if(index($host,"nifberry.727.net") gt -1){

    print "Content-Type: text/download¥n";

 #ファイル番号からファイルを取得

   if($query{'FILENO'} == 1){

       print "Content-Disposition: inline; filename=¥"test1.csv¥"¥n¥n";

       open(FILE, "hatena55.csv");

    }

    elsif($query{'FILENO'} == 2){

       print "Content-Disposition: inline; filename=¥"test2.csv¥"¥n¥n";

       open(FILE, "test.csv");

    }

    

 #ファイル送信

    @que = <FILE>;

    foreach $ax  (@que){

      print qq($ax);

    }

    close(FILE);

  }

  else{

 #エラー処理

      print qq(Content-type: text/html¥n¥n);

      print qq(不正アクセスです);

  }

 exit;

sub decode

{

  local(@query)=split(/&/,$qu);

  foreach(@query){

    tr/+/ /;

    tr/;/ /;

    tr/`/ /;

    tr/|/ /;

    ($key,$val)=split(/=/);

    $key=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/¥r¥n/¥n/g;

    $vin{$key}=$val;

  }

  return *vin;

}

ためしに直接URLにアクセスすると、このようにはじかれます

id:xiaotai

!!

わざわざありがとうございます!

助かりましたー。

2006/02/01 15:15:57
  • id:aki73ix
    ダイアリを削除したので、参考までに補足をコメントに残しておきます
    ------------
    より簡単な直リンクを防ぐ、リファーによるアクセス制限プログラムを作ってみたのですが

    id:inspfightman さんが 基本認証ヘッダを出力をする方法を紹介されています

    .htaccess 編集不能ということなので、他にも制限(パスワードファイルにアクセスできない等)がありそうなので
    DBアクセスのプログラミングも自分で組まないといけないとか、ちょっと工夫が必要ですが
    もし完成すれば、セキュリティ面ではこちらの方が上ですね
    ----------------
    inspfightman 『紹介してみたものの、Perl/CGI での実装方法が思いつきませんでした。標準認証で入力されたID/パスワードをPerl/CGI 上で取得する方法、ご存知ないですか?
    自分の環境で試したところ、環境変数に値が入っていなかったので。』(2006/02/01 17:37)

    aki73ix 『やっぱり、 .htaccessが編集不能ということは、基本認証のID/PASSWORDを通常の方法では取得できないと思うので、その部分は自分でコーディングしないといけないんじゃないでしょうか? .htpasswd自体も編集不能だと思われます
    http://easycgi.xrea.jp/tips/perl/pwdlimit.htm
    例えばこんな感じとか』(2006/02/02 09:53)

    # inspfightman 『開発をしてると、フォームをHTML で表示してって作業がうっとおしいので、フィルタ作って標準認証を動的に発行するシステムを作れれば、って思ったんですね。
    やっぱPerl/CGI じゃ無理なのかなぁ。』(2006/02/02 11:53)

    aki73ix 『.htaccess が利用可能なら Perl/CGIでも問題は無いはずなんですけどね
    やっぱり、自前の認証処理になるかなぁ・・・?|。・・)』(2006/02/02 19:24)

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません