勉強したことのメモ

webプログラマが勉強したことのメモ。

画像や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部分は対応したことが無かったので勉強になった。

 

参考サイト

https://info-con.co.jp/tips/htaccess-01-access_referer/

 - 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 ...

ルートとディレクトリ

イマイチ分かっていなかったのでメモ。 ■ルートディレクトリ ツリー型ディレクトリ ...