特定のフォルダファイル(画像、文書)をHTML経由で許可、直接ダウンロードは禁止。
2018/07/27
2019/12/23
タグ: HTML経由, 文書, 特定フォルダー禁止, 画像, 直接ダウンロード禁止
例えば、特定サイトのHTMLからリンクされているPDFやWORD,EXCELファイルはブラウザで開けるが、直接URLダイレクトや検索結果のPDFリンクは開けないようにしたいという要望はよくあると思います。通常HTMLやプログラミング言語はサイトの入口を制御しているフレームワーク等のコントローラーでページ制御するため細かいアクセス制限をかけられるのですが、画像やその他の文書ファイルになってくるとどちらかといえばWEBサーバ側の制御配下であるため思ったようにファイルを隠蔽できないという悩みを抱えているエンジニアも多いと思います。今回はちょとした設定でできる制御方法について説明したいと思います。
Apacheの設定でリファラーチェックを入れHTMLからクリックで表示、直接URL指定、検索結果PDFリンクは非表示に!
直接ブラウザでファイルオープンをさせないための上位フォルダーをDirectoryディレクティブで指定しフィルターします。
1 2 3 4 5 6 7 |
#HTML経由でしか開けないようにしたいファイルの置き場にリファラーチェックを適用 <Directory "/var/www/vhosts/cyber-data/wp-content/uploads"> SetEnvIf Referer "^https://www.cyber-data.tokyo" check Order Deny,Allow deny from all allow from env=check </Directory> |
Apache2.4の場合
1 2 3 4 5 6 7 |
#HTML経由でしか開けないようにしたいファイルの置き場にリファラーチェックを適用 <Directory "/var/www/vhosts/cyber-data/wp-content/uploads"> SetEnvIf Referer "^https://www.cyber-data.tokyo" check <RequireAny> Require env check <RequireAny> </Directory> |
これでApacheを再起動すれば適用です。.htaccessでやるなら再起動も不要でしょう。
細かくファイルの拡張子まで指定してやりたければFilesディレクティブでパターンマッチさせれば良いと思います。
1 2 3 4 5 6 |
<FilesMatch "\.(gif|jpg|png|pdf)$"> SetEnvIf Referer "^https://www.cyber-data.tokyo" check Order Deny,Allow deny from all allow from env=check </FilesMatch> |
FilesMatchを使った Apache2.4の場合
1 2 3 4 5 6 |
<FilesMatch "\.(gif|jpg|png|pdf)$"> SetEnvIf Referer "^https://www.cyber-data.tokyo" check <RequireAny> Require env check <RequireAny> </FilesMatch> |
Apacheのディレクティブで表示結果に出さないよう抑え込む場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#全てのフォルダー配下にあるPDFをインデックスさせない。 <Files ~ "\.pdf$"> Header set X-Robots-Tag "noindex" </Files> #特定のPDFファイル名をインデックスさせない。 <Files ファイル名.pdf> Header set X-Robots-Tag "noindex" </Files> #2019年になったら特定のPDFファイル名をインデックスさせない。 <Files ファイル名.pdf> Header set X-Robots-Tag "unavailable_after: 31-Dec-2018 23:59:59 JST" </Files> |