|株式会社LYZON

管理機能

Drupalに重要ファイルをアップロードする危険性について

LYZONエンジニアの塩川です。
この記事では、DrupalのPrivateフォルダの使用方法について解説します。

はじめに

サイトに掲載するPDFや画像は、コンテンツと同じように「公開」「非公開」を切り替えられます。管理画面で非公開にすれば、一覧やページには表示されなくなります。
しかし、ここで見落とされやすい点があります。画面に表示されないことと、ファイルが取得できないことは別の話だという点です。設定によっては、非公開にしたはずのPDFが、URLを直接入力すれば誰でも開ける状態のまま残っていることがあります。
決算資料やプレスリリースのように、公開日時が決まっている文書を扱うサイトでは、これは無視できない論点です。この記事では、Drupalが持つ2種類のファイル保存先と、その使い分けの考え方を整理します。

Drupalには2種類のファイル保存先がある

Drupalはアップロードされたファイルの置き場所として、性質の異なる2つの仕組みを持っています。
ひとつが公開ファイル(public)です。Webサーバーが直接読み取れる領域に保存され、URLにアクセスすればそのまま配信されます。もうひとつが非公開ファイル(private)で、Webサーバーからは直接読めない領域に保存され、配信のたびにDrupalが権限を確認します。
初期状態では、多くの場合すべてのファイルが公開ファイルとして扱われます。特に意識せずに構築を進めると、サイト内のPDFも画像もすべて公開ファイルになっている、という状態が生まれます。

公開ファイルと非公開ファイルの違い

公開ファイルは「URLを知っていれば誰でも取得できる」

公開ファイルの配信には、Drupalが一切関与しません。リクエストを受けたWebサーバーが、ファイルをそのまま返して終わりです。
これは速度の面では大きな利点です。プログラムを動かさずに応答できるため、アクセスが集中しても安定しています。CDNにも問題なくキャッシュされます。
一方で、この仕組みには重要な含意があります。Drupalが関与しないということは、公開・非公開の判定も行われないということです。

したがって、次のような状況が生まれます。

  • コンテンツを非公開にしても、添付ファイルのURLを知っていれば開ける
  • 公開予約中の資料が、公開日より前に取得できる
  • 一度公開を取り下げた文書が、URLを知る人には引き続き見えている

URLは推測されにくい文字列であることも多く、実害が出ていないケースもあります。しかし「URLが知られていなければ大丈夫」という状態は、セキュリティ上の対策とは呼べません。メールで共有されたURLや、検索エンジンに登録されたURLは、想定より広く残るものです。

非公開ファイルは配信のたびに権限を確認する

非公開ファイルは、Webサーバーの公開領域の外に保存されます。そのため、ファイルの実体を直接指すURLは存在しません。
利用者がファイルを開こうとすると、いったんDrupalが処理を受け取り、「このファイルは公開されているか」「このユーザーは閲覧権限を持つか」を判定します。条件を満たさなければ、アクセスは拒否されます。
この方式であれば、公開前の資料が流出することは原理的に起こりません。判定を経ずにファイルへ到達する経路が存在しないからです。

ただし、無条件に非公開ファイルを選べばよいというものではありません。
配信のたびにDrupalが起動し、権限を判定してからファイルを送り出します。数MBのファイルであれば、転送が終わるまでプログラムがその処理を抱え続けることになります。同時アクセスが増えると、サーバーの処理能力を圧迫します。
さらに、権限判定を伴うファイルはCDNにキャッシュさせられません。キャッシュしてしまえば、判定を経ずに配信される道ができてしまうためです。結果として、すべてのアクセスがサーバー本体に到達します。
この差が特に効いてくるのが画像です。1ページに画像が20枚あれば、表示のたびに20回の判定処理が発生します。ページ全体の表示速度に直接影響するため、画像を非公開ファイルにするのは現実的ではありません。

公開と非公開の使い分け

以上を踏まえると、実務的な落としどころは次のようになります。
公開ファイルにするものは、サイトのデザインに使う画像やロゴ、公開済みコンテンツに埋め込まれた写真などです。隠す必要がなく、数が多く、表示速度への影響が大きいものが該当します。
非公開ファイルにするものは、公開日時が決まっている文書、取り下げの可能性がある資料、社内向けの配布物などです。数が限られており、機密性が求められるものが該当します。
つまり「サイト全体をどちらかに寄せる」のではなく、ファイルの種類ごとに分けて設計するのが基本方針になります。

最後に

ファイルの公開設定は、構築段階では見落とされやすく、公開直前や運用開始後に問題として浮上しやすい領域です。「非公開にすれば見られない」という前提が実際に成り立っているかは、構築時に一度確認しておく価値があります。


※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Drupalのバージョンによって実装されている機能が異なります。

Value we can provide

LYZONが
提供できるバリュー

しっかりとしたWeb基盤は、お客様のWebDXの発展を支えます。
中長期的10年~20年使える基盤となり、お客様の発展に貢献していくためにもシステムアーキテクトの全体像が重要です。