Re: Re: ファイルへの直接アクセスを禁止するには?

2013年10月16日 at 5:12

お返事ありがとうございます。

権限設定すればファイルのURLはPHPを経由するので、

上級権限モードではありますが、ファイルマネージャで閲覧できるユーザからゲストを外し、管理者しか閲覧できないようにしてみても、依然として直リンクへリダイレクトされてしまいます。何故なのでしょうか?

 http://www.abc.com/download_file/0/123/
  ↓
 http://www.abc.com/files/0123/4567/8910/image.jpg

非公開ディレクトリを追加のファイル保存場所に設定し、ファイルをそちらに移動することができます。

なるほど、「ファイルの保存場所」の「標準のファイル保存場所」の部分で、アップロード先が決まっていたのですね。了解しました。

タグ:

Re: ファイルへの直接アクセスを禁止するには?

2013年10月16日 at 10:08
ああ、確認したらファイル保存場所がデフォルトのときはダウンロードの強制ではなくリダイレクトになるようになってました。なんでだろ…

とりあえず、下記コードでオーバーライドすると元ファイルURLは見えなくなります。

/controllers/download_file.php に設置

<?php

defined('C5_EXECUTE') or die("Access Denied.");
class DownloadFileController extends Concrete5_Controller_DownloadFile {

protected function download($file, $rcID=NULL) {
$filename = $file->getFilename();
$file->trackDownload($rcID);
$ci = Loader::helper('file');
$ci->forceDownload($file->getPath());
}

}
 

Re: Re: ファイルへの直接アクセスを禁止するには?

2013年10月16日 at 18:20
お話の通り、「download_file.php」のオーバーライドで解決しました。

ただ、「標準のファイル保存場所」の変更は、キャッシュなどは素直に移動してくれるのですが、ファイルマネージャからアクセスできなくなったり、少し変な挙動を示しました。
なので変更するのはやめて、.htaccess で直接アクセスを拒否してみました。
 ----- .htaccess -----
 Deny from all
 --------------------

これで安心です。ありがとうございました。