画像やPDF等のファイルへの直接アクセスは禁止し、PHP経由のみ表示やダウンロードを可能にする
ファイルアップローダーを作成する案件があり、アップロードしたファイルは「https://test.com/file/001」みたいな形でアクセスすることでダウンロードさせたかった。また、「https://test.com/test.jpg」のようにURLを打ち込むと、通常アップロードしたファイルがブラウザ上で表示されるがこちらは禁止したかった。以下に対応方法をメモ。
htaccessファイル
SetEnvIf Referer "^https://test\.com" ref_ok Order Deny,Allow Deny from all Allow from env=ref_ok
画像等をアップロードするディレクトリに上記htaccessファイルを設置することで、直接URLを打ち込んでもブラウザ上では表示されなくなる。ドメイン部分は適宜変更する。
PHP経由でダウンロード
//ファイルの指定 $file_name = 'test.pdf'; $file = './file/' . $file_name; $file_info = pathinfo($file); //ファイルタイプ(MIMEタイプ)を指定 header('Content-Type: application/' . $file_info); // ダウンロードするダイアログを出力 header("Content-Disposition: attachment; filename=" . $file_name); //ファイルサイズを取得 header('Content-Length: '.filesize($file)); // ファイルを読み込んで出力 readfile($file); exit();
ファイル名やパスは適宜変更する。
所感
PHP経由でダウンロードというのは過去にも何度か扱ったものの、htaccess部分は対応したことが無かったので勉強になった。
参考サイト
関連記事
-
-
さくらvpsでパッケージのアンインストール
yumでインストールしたパッケージをアンインストール したかったけど、やり方が分 ...
-
-
WordPressでメモリを節約しつつ高速化する設定方法
メモリ1GのVPSを借りてWordpress以外にも、ちょいちょいものを置いてい ...
-
-
WordPressのxmlrpc.phpへの攻撃
サーバーの死活監視をしているシステムから、1つのサイトが落ちているとアラートがき ...
-
-
Nginxで特定のディレクトリに対してBasic認証を設定
Nginxで特定のディレクトリに対してBasic認証を設定したい。Apacheだ ...
-
-
SSLのセキュリティ設定
SSLのセキュリティ設定をする事があった。指定されたファイルに指定された内容を書 ...
-
-
さくらvpsでPHPのエラーログ設定
PHPのエラーログを設定した際のメモ。 vi /etc/php.ini で設定フ ...
-
-
サーバー監視はNew Relicが楽に導入できて便利
サーバー監視はNew Relicが楽に導入できて便利だった。 メモリ使用率やCP ...
-
-
プロキシサーバの接続ログを確認する方法
だいぶ前にVPSにプロキシサーバ(squid)を導入した。接続IPは指定している ...
-
-
Plesk12にログインしようとするとエラー発生
Plesk12のログインページを開くと「ERROR: Zend_Db_State ...
-
-
ルートとディレクトリ
イマイチ分かっていなかったのでメモ。 ■ルートディレクトリ ツリー型ディレクトリ ...