1

さて、これが状況です。私が一緒に働いている人々のグループは、彼らが管理する教育サイトを持っています。サイトのコンテンツのほとんどは、ダウンロード可能なドキュメントの形式になっています。ユーザーはログインすると、ドキュメントのカテゴリを表示してダウンロードできます。ページのダウンロード リンクは、ドキュメントへの直接リンクです。

発見された問題は、誰かが直接リンクを持っている場合 (たとえば、誰かが電子メールで送った場合)、ログインせずにドキュメントをダウンロードできることです。現在、サイトのすべてのページで、ユーザーがページへのアクセスを許可する前にログインしますが、もちろん、Word および PDF ドキュメントには同じ保護がないため、誰かが直接リンクからそれらをダウンロードしても、サイトを経由することはありません.

これらのドキュメントがこの方法でダウンロードされないように保護する方法、またはユーザーに最初にログインさせる方法はありますか? サイトの管理者は、サイトへのログインを持っていないユーザーが、アクセスしてはならないドキュメントにアクセスできることを懸念しています。ちなみに、このサイトは ColdFusion で書かれています。

編集:さて、スティーブのソリューションを次のように実装しようとしています:

<cfheader name="Content-Type" value="unknown">
<cfheader name="Content-Disposition" value="attachment; filename='#resourceName#'">
<cfcontent file="#resourceData.ResourcePath#" type="Application/unknown" deleteFile="no">

.jpeg と pdf では問題なく動作しますが、Word などの他のドキュメント タイプでは、.xml ファイル (具体的には、.xml ファイルを含む「_rels」、「docProps」、および「word」という名前のサブフォルダー) でいっぱいの zip ファイルをダウンロードします。 、および「[Content_Types].xml」という名前の追加の最上位ファイル)。コンテンツ タイプを Word の mimetype に設定すると、正常にダウンロードされます。何か案は?

編集:さて、ファイルタイプとして「Application/Unknown」を使用して問題を解決する方法がわかりませんが、getPageContext().getServletContext().getMimeType() を使用して MIME タイプを取得すると、それを for に入れることができますタイプ。残念ながら、この関数が新しい Office ドキュメント タイプの MIME タイプを取得するために機能しないという問題がまだ残っています。私たちのサーバー担当者が見ています。必要に応じて、.docx/.pptx/.xlsx ファイルを検出するロジックを設定し、getPageContext().getServletContext().getMimeType() を使用して他のドキュメントの MIME タイプを検出します。しかし、「アプリケーション/不明」でこれを機能させるための提案は大歓迎です。

4

2 に答える 2

3

Once they got the direct link, they can do whatever they want unless you add security on the web server level. However by that time it's usually limited to HTTP Basic Authenticate and it's not easy to authenticate against your DB of user credentials.

The preferred ways would be making the files non-web accessible and shift the file serving responsibility to the application layer aka CF :

  • handle the file serving on CF using <cfcontent> (ok with light load / small files, see steve's answer)
  • use mod_xsendfile on Apache or IIS (through Apache Emulator) (recomeneded)
  • move file to a url with random filename, and clean up the file after x minutes through cfscheduler. (more like a hack, but it has worked for many)
于 2013-05-31T19:57:40.500 に答える