Carpe Diem

備忘録。https://github.com/jun06t

特定のファイルへのアクセス禁止、ダウンロード禁止

自分の使用しているファイルをホームページ上では表示していいけど、直接ダウンロードされるのは・・・・・・と思っている人にとって有益な情報だと思います。 僕の場合Webビューワの元ファイルを直接ダウンロードできるようにすると、どんどんサーバに負担がかかるのでアクセスを禁止しようと。 ググって一番出てくるのは「リファラー」を用いた直リンク禁止の方法だと思います。 ただそれだと偽装されてしまえばアクセス可能になってしまうので、他の方法を探しました。 方法は主に2通りあって、どちらもapacheのディレクティブ設定で使えます。 よくググる.htaccessに書いて~というやり方が見つかりますが、.htaccessを使用する設定にすると、各フォルダで.htaccessファイルがあるか毎回走査されてサーバへの負担になります。なので極力htaccessファイルは使用しない方がいいチュートリアルに書いてありました。 いつ .htaccess ファイルを使う(使わない)か。 というわけでディレクティブ設定、つまりは/etc/apache2/site-available/のdefault-sslの編集で設定します。 MIMEタイプを指定して、ダウンロードできなくする。 ディレクティブ設定のところにAddTypeディレクティブを設定します。 AddType application/x-httpd-php .zip と書くことで、「.zip」ファイルはPHPファイルとして解釈され、https://~.zipに直接アクセスされることでダウンロードされるのを防ぐことができます。実際に入力してみると白紙ページになりますし、ダウンローダを使用してもダウンロードできませんでした。こちらは<Directory>だけでなく、<Location>でも使用できました ②<Files>ディレクティブを使用する。 <Files ~ "\.(dat|log|csv)$"> deny from all </Files> と書くことで、この場合.dat、.log、.csvのファイルへの外部からのアクセスを禁止できます。 こちらはファイルにアクセス使用とすると「Forbbiden」表示になります。ダウンローダは「ファイルがありません」という反応でした。ただしこれは<Directory>でしか使えません。 以下実際にディレクティブ設定の例です。僕の場合はFilesディレクティブを使用することにしました。一応コメントアウトMIMEタイプの指定もしています。         Alias /dav "/var/www/webdav"         <Directory "/var/www/webdav">                 SSLRequireSSL                 Order deny,allow                 Allow from all                 #AddType application/x-httpd-php .zip                 <Files ~ "\.zip$">                        deny from all                 </Files>         </Directory> 以上です。 ソース: ブラウザ経由でのアクセスを一切拒否する ダウンロードされるべきでないファイルがダウンロードされるのを防ぐ <Files> ディレクティブ 特定のファイルだけ守る