• ベストアンサー

サーバー内のファイルに対するアクセス制限

IDとパスワードを入力すると利用出来る会員制のページがあります。 認証は、クッキーとMySQLを駆使して行っています。 ログインすると、ダウンロードコーナーがあり、lzhファイルをダウンロード出来ます。 ところが、このlzh自体は直接URLを打ち込まれると、ログインしていない人でも簡単に取得出来る状態です。 lzhファイルのあるフォルダに「.htaccess」でアクセス制限をかければいいかとも思いますが、これではわざわざログインしているのに更にログインが必要になりおかしな感じになってしまいます。 普通に置いてあるlzhに対して、どのように制御する方法があるでしょうか? 宜しくお願い致します。

  • mm666
  • お礼率92% (58/63)
  • Perl
  • 回答数6
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.5

いろいろと回答が出ているようですのでファイルの置き場所と理由についてはお分かりと思います。 CGIコードは非常に簡単なので以下に示します。 ↓ここから #!/usr/bin/perl ## 目的ファイルのファイル名 my $fname = "test.lzh"; ## 目的ファイルのパス付きファイル名(HTTPアカウントでアクセスできるところ) my $fn="/home/test/".$fname; ## HTTPヘッダ print "Content-type: application/octet-stream\n"; print "Content-Disposition: attachment; filename=".$fname."\n\n"; ## バイナリモードでファイルを開いてバイナリ指定の標準出力にプリント open(IN01,$fn) || &error("Can't open $fname"); binmode IN01; binmode STDOUT; while(my $DT=<IN01>){ print STDOUT $DT; } close(IN01); ↑ここまで このCGIでは「/home/test/」がHTTPの権限で参照できる環境であることが前提ですので あなたの環境に合わせて設定してください。

mm666
質問者

お礼

ralf124cさま、詳しい説明をありがとうございます。助かります。 「application/octet-stream」というものをよく知りませんでした。 早速実験してみましたが、どうしても0バイトで保存されてしまいます。 エラーが出ないのでファイルはオープン出来ているとは思うのですが私の環境では保存がうまくされていません。 環境のせいかと思うので、もっと調査してみようと思います。 ありがとうございます。

mm666
質問者

補足

すみません、どこに書いたらいいのか分からず補足に書かせてもらいました。質問者のmm666です。 教えて頂いたプログラムで成功しました! 単純に「## 目的ファイルのパス付きファイル名(HTTPアカウントでアクセスできるところ)」を間違えていました。 存在しないファイルを指定していたのですが、ファイルオープンでエラーになっていなかったので気付くのが送れました。(焦っていてすみません) たまに、何かの拍子にファイル保存ウィンドウが出るのではなく、ブラウザにコード?が書き出されてしまう時があります。 これはどんな時に起きてしまうのでしょうか。 一旦ブラウザを閉じ、再度アクセスすると上手く行きます。 どんな時にこの症状が出るのか定かではないのですが… (プログラムも、読み込むファイルも同じ状態です) 何度も何度もやっていたからかもしれませんね。 今はずっと上手く行っているので、これでGO出来ます。 本当にありがとうございました。

その他の回答 (5)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.6

0バイトダウンロードはファイル読み込みの権限がない場合に発生します。 FUTOMIのサーバアナライザなどであなたのWebサーバがブラウザ経由でどのユーザ権限でアクセスしているのかをチェックして権限を設定してください。 最低でも「644(rw-r--r--)」かなと思います。ただファイルの権限がそうでも、それより上のディレクトリに読み込み権限がなければたどりつけませんが・・・。 ご確認ください。

mm666
質問者

お礼

ralf124cさま、アドバイスをありがとうございます。 権限は大丈夫でした。 私が指定階層を間違えていました。 ファイルも読めていなかったはずです。(エラーにはならなかったのは?でした) ralf124cさまのプログラムで一気に解決しました。 本当にありがとうございました。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.4

すでに出ている回答でよいと思いますが、参考 URL のような form 認証 もあります。 この form 認証を使うと、直接 ダウンロードしようすると、認証画面に 飛ばされます。

参考URL:
http://module.jp/blog/authentication_from_apache.html
mm666
質問者

お礼

t-okuraさま、ありがとうございます。 このような素晴らしいものがあったんですね。 イチから作るプログラムであれば、ぜひ利用したかったです。 今回はすでに稼働中のものなので、認証部分を大幅に改造出来ないという事があり利用は難しいのが残念です。 情報をありがとうございます。とても助かります。

  • gmataw
  • ベストアンサー率50% (12/24)
回答No.3

No.2です。 > 実験しているのですが、どうしても「ページが見つかりません」とlzhに > アクセス出来ない状態になっています。 えっと、先程提示したディレクトリ構成ですとWEBからはアクセス出来ません。 というか、アクセス出来なくするのが狙いです。 1.通常のWEBアクセスは遮断 2.download.phpの様なダウンロード処理プログラムを作成 で、download.phpからしかアクセス出来ない仕様にします。 プログラムは、 1.apacheユーザー(PHP/Perl)等からのアクセス権限を付与 2.ユーザー認証 3.ファイルを読み込み 4.出力 の処理を実装する事になるかと思います。

mm666
質問者

お礼

gmatawさまありがとうございます。 やっとメンテナンスが終わって見させて頂いてます。 Locationでアクセス出来なくて当然ですよね、頭から間違っていました。 ファイルを読み込んで出力するという事は、やはりWebからアクセス出来る場所にファイルをコピーする事になるという感じでしょうか。 それともファイルを書き込まなくてもユーザはダウンロード可能になるのでしょうか? 理解力がなくて何度も質問して申し訳ありません。

  • gmataw
  • ベストアンサー率50% (12/24)
回答No.2

内容的にはNo.1さんと同じですが、もう少し詳しく書くと... apaccheのドキュメントルートが/var/www/html/だと仮定すると、 以下の様なディレクトリ構成になっているかと思います。 /var/www/   + html/ [APACHE_DOCUMENT_ROOT]     + index.html     + hoge.html     + download.php   + archives/     + hoge.lzh     + foo.lzh 上記のarchives/配下にダウンロード用のファイルを配置すると 通常のWEBアクセスからはアクセス出来ない状態です。 この状態で、例えばdownload.php等のダウンロード実行ファイル を作成して、archives/配下の任意のファイルにアクセスして ダウンロード機能を実装すればよいかと思います。

mm666
質問者

お礼

gmatawさま、詳しい説明をありがとうございます。 実験しているのですが、どうしても「ページが見つかりません」とlzhにアクセス出来ない状態になっています。 ディレクトリの権限などの関係でしょうか、単純にアクセス方法を間違えているのか、階層を間違えているのか、 もう一度じっくりやってみます。 取り急ぎ、お礼を言いたくて書かせて頂きました。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

ファイルはHTTPから見えない場所において CGIを元のファイルのリンク先にし、そのCGIでは実行時にクッキーをチェックしてファイルを渡すかどうかを判断させる。 でどうでしょうか?

mm666
質問者

お礼

ralf124cさま、早速のご回答ありがとうございます。 この場合、クッキーチェックでOKであればLocationでlzhに飛ばすような感じでしょうか? HTTPから見えない場所のファイルに飛ばす事は可能なのでしょうか? 実験してみたいと思います。

関連するQ&A

  • パスワード制限について

    今度ホームページにパスワード制限をしたメンバーページを作ろうと思います。 そこでクッキーによるパスワード制限と.htaccess(BASIC認証)によるパスワード制限では、どちらが良いと思いますか? メンバーページでは、メール送信や掲示板の書き込みなどをしたいです。つまり出会い系みたいな感じです。それなのでメンバー毎のIDを得たいのです。 BASIC認証ではパスワードの認証は出来るのですが、ユーザー毎のIDを得ることは不可能?だと思いますし、クッキーだとセキュリティ上問題がありそうだし。パラメーターで各ページ事、.cgi?~で送るのも問題だし。 実際出会い系などで用いられるパスワード制限はどのようにやっているのでしょうか?出会い系ではなくとも、そのようなホームページを持っている方はどのようにしていますか?自分としては、パスワードはBASIC認証にして、IDはクッキーから得ようと考えています。 セキュリティーなどの件での投稿も待ってます。

    • ベストアンサー
    • Perl
  • .htaccess 外部サーバーからファイル書き換えについて

    サーバーA、サーバーBという2つのサーバーがあります。 Aでは会員制のサイトをやっていて、.htaccessを使用してパスワード制限をかけています。 IDの追加、削除、パスワードの変更は.htaccessの下に置かれているCGIにより可能です。 パスワードファイルは.htaccessと同じ階層に置かれています。 Bは会員のみがダウンロードできるファイルが置かれています。 BもA同様、.htaccessを使用してパスワード制限をかけています。 パスワードはAと同じ内容のものをBの.htaccessと同じ階層に置かれています。 IDの追加、削除、パスワード変更は現在できません。 Aでパスワードファイルの変更を行った際に、 Bのパスワードファイルも同じ内容に変えられるようCGIを修正したいのですが、 うまくいきませんでした。 .htaccessの階層にあるせいでしょうか? Bに置いてあるパスワードファイルをAから修正する事はできないのでしょうか。 Bのパスワードファイルを.htaccessより上の階層に置くしか方法はありませんか?

    • 締切済み
    • CGI
  • ディレクトリへのアクセス制限

    htaccessを使って、ディレクトリへのアクセス制限をしたいのですが。 できれば、IDとパスワードの発行、管理はMySQL プログラムはPHPで作成したいと思っています。 いまいち、htaccessを使っての制限方法の仕組みが よく分かっていないのですが、サンプルコードかフリーのプログラムが あれば教えていただけないでしょうか?

    • 締切済み
    • PHP
  • PHPの管理者ページのアクセス制限について

    phpで会員制サイトの制作を勉強中です。 pdoでmysqlデータベースに接続しています。 現在、管理者ページの作成を勉強中なのですが、 疑問に思ったことがあります。 IDとパスワードで認証し、 管理者用ページのファイルの内容を表示する仕組みにしたら、 よほど難解なディレクトリ、phpファイル名、ID、パスワードにしないと 認証が通ってしまいそうな気がします。 調べてみると、参考書には管理者ページのパスを .htaccessで特定のIPアドレスにのみアクセス許可を与えるように記述されていました。 管理者用ページのphpファイルへは 難解なディレクトリ、phpファイル名、ID、パスワードにした上で 特定のIPアドレスのみアクセスできるように.htaccessで設定した方が良いでしょうか? そこまで気負う必要はないのでしょうか? 一般的に管理者用ページの認証が どのように作られているか気になります。 ご回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • アクセス制限ページの作成について

    アクセス制限ページの作成を考えています。 よく見かけるものでホームページ上にIDとパスワードを入力する箇所があり、そこからログインした後にIDごとにそれぞれのページがあるといったような会員サイトはどのようにして出来ているのでしょうか? CGIだと直リンクされると見れてしまったりBASIC認証だと一つのログイン画面からIDごとにページを割り振れないしと。。。。 初心者ですので教えて頂ければありがたいです。

  • PHP・セッションでのユーザー認証サイトでDL用ファイルへのアクセスも同時に制限するには

    最近PHPを勉強している初心者です。 会員制サイトの構築を考えています。 基本的な仕組みは ・会員はHTML上のフォーム入力によりログイン ・PHPから、MySQLに保存された会員データベースを呼び出して認証 ・セッションを用いて会員用ページにアクセス のようにしようと思います。 しかし、この仕組みではページへのアクセス制限しかできません。 具体的には会員用ページにのPDF文書を置きたいのですが、 ログインせずともURL直接アクセスでDLできてしまいます。 DL用ファイルへのアクセスも含めて制限するのであればBasic認証などが考えられます。 ですがユーザーに2度もパスワードを入力させるわけにはいきません。 パスワードの管理も2重になり、煩雑です。 このような場合、どうやってアクセス制限するのが良いのでしょう。 要点は ・DL用ファイルを含むすべての会員用コンテンツにアクセス制限をかける ・認証は1回のみ(できればフォームで) ということです。 類似の質問には目を通したつもりですが、解決できませんでした。 よろしくお願い致します。

  • アクセス制限でパスワードが通らないのですが・・・

    ほとんど初心者です。わかりやすくお教えいただけると助かります。 .htaccessでアクセス制限をしたいのですが、IDとパスワードを 入力する画面にはなるのですが、パスワードが通らなくて困っています。いろいろ調べていたのですが、あるサイトでは、そういった場合.htaccessファイルの中の絶対パスが間違っている可能性があると書いてありました。.htaccessファイルはマイドキュメント内のフォルダに入っているのですが。絶対パスの調べ方というのはあるのでしょうか?また他に原因が考えられるとしたら何かありますか? お分かりになる方いましたら、ご返答お願いします。

  • アクセス制限のページを作りたい。

    アクセス制限のページを作りたい。 知人に頼まれてHPを更新することになりました。 会員ページにアクセス制限を加えて、会員以外は見れないようにしたいと思ってます。(会員・非会員を区別する) 会員は60名ほどだと思います。 パスワードのみだと現会員が脱会した後でも見られる可能性があるのでパスワードとIDでのログインページを作りたいです。 インフォシークの無料ページを使ってるのですが、ここで使用可能なものを教えて下さい。 よろしくお願いします。

  • (新)無料FC2でアクセス制限

    こんばんは、Skireです。 タイトル通りをしたいのですが、何故かできません。 出来ているかどうかを確認するために 自分のIPアドレスをhtaccess.htaccessと書いたファイルの中の deny from ----- といった形で書きこんだのですが 何の反応も示してくれません。 見事にページが表示されてしまいます。 もしかしてFC2のアクセス制限とは パスワードでの認証のみなのでしょうか? 手順通りにやるとそれしかできないのです。 私としては特定の相手をはじきたいだけなので パスワード認証とまではしたくないのです。 .htaccessとFTPが使えるということで FC2を選んだのですが・・・もしやこれは失敗なのでしょうか。

  • 「CGI+Flash」の「BASIC認証パスワード制限システム(01)

    「CGI+Flash」の「BASIC認証パスワード制限システム(01)」に関して質問です。 配布CGIをダウンロード後、設定などを行っていた時の事なのですが、 「member」のフォルダ内に「.htaccess」のファイルが実在していませんでした。 あと、「.htaccess」のファイルだけで完成の所でした。 「.htaccess」のファイルだけは、自分で作成しないといけないのでしょうか? もし、自分で作成しないといけないなら、書き方などを教えて頂けませんでしょうか? また、配布されているのであれば、教えて頂けませんでしょうか? 書き方やどのように「BASIC認証パスワード制限システム(01)」のCGIと繋げれば良いのかが分かりません。 具体的に教えて頂ければ嬉しいです...

    • 締切済み
    • CGI

専門家に質問してみよう