9

クライアントがログインしPDFsて、サーバーに保存されているさまざまなものを表示できる Web サイトの開発に取り組んでいます。これらの PDF はクライアントに固有のものであり、ログインしていない人がアクセスできないようにする必要があります。サーバーにファイルを取得することは問題ではありません。エンド ユーザーにそれらを提供する方法がわかりません。

ファイルの代わりに提供されるデータを使用してこの種のことを実装したSQL serversので、これを行う最も効果的な方法は完全にはわかりません。

ウェブサイトはにありLAMP、私の最小限の経験はありますPHP(ただし、フレームワークまたは他の言語がこれをより簡単にする場合は、それを学ぶことができます).

私はおそらく頭がいっぱいですが、通常はそうなので、どんな意見でも素晴らしいでしょう。

4

3 に答える 3

9

ファイルを webroot の外に置きます。次に、PHP を使用して、スクリプトを介してファイルを渡します。そうすれば、誰もファイルに直接リンクしてコントロールをバイパスすることはできません。(当然、ユーザーがそのファイルを取得する権限を持っていることを確認した後にのみ、これを行うスクリプトを確認してください)。

サンプル PHP:

<?php
    session_start();
    if (!isset($_SESSION['authenticated'])) {
        exit;
    }
    $file = '/path/to/file/outside/www/secret.pdf';

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>
于 2012-05-24T19:13:58.447 に答える
4

簡単な方法は、これらのファイルに長いランダムなファイル名 (たとえば、ランダムな 20 文字) を付けることです。技術的には誰でもアクセスできますが、URL を推測することはできないため、許可された人だけがアクセスできます。

別の方法として、John Conde は既に PHP スクリプトからファイルを提供する方法を概説しています。パフォーマンスがわずかに低下しますが、コードと同じくらい安全です。追加できる唯一のことは、それらを webroot の外に配置できない場合は、.htaccess を使用して、人々がファイルに直接アクセスするのを防ぐことができるということです。

于 2012-05-24T19:16:51.900 に答える
2

ジョンはそれを行うための主要な正しい方法を投稿したので、(おそらく劣った) 代替手段を追加します: データベースから提供します。PDFのBLOB列を用意し、データベースからファイルデータを読み取り/保存するだけです。かなり大きなテーブルになってしまいますが、うまくいきます。それを提供するには、ジョンが投稿したのと同じheader()s を設定する必要があります。ファイルからではなく、DB からデータを送信するだけです。

これには、ファイル名の衝突などがないことを確認する必要がないという利点があります。

于 2012-05-24T19:19:39.927 に答える