問題

私は登録ユーザー(誰でもできる)がファイルをアップロードできるシステムを開発しています。ファイルを.doc、.docx、.pdfタイプに制限しようとすると、mime-typesなどをブロックしましたが、追加のセキュリティではwebrootの外のフォルダにアップロードされます。

他のユーザーはファイルをダウンロードすることを選択できます。どうすればそれを許可できますか?明らかに、webrootの外にあるので、ファイルへのリンクを入れることはできません。私はファイルに到達する方法がわかりません!私はファイルにアクセスするためにPHPファイル関数を使用することができると推測しますが、それを要求したユーザーにどのように提供するのですか?

どのようなセキュリティの影響がありますか?

ありがとう。

  ベストアンサー

次のような PHP スクリプトが必要です。

  1. content-typeヘッダーを正しく設定します(ユーザーがダウンロードしている内容に応じて)
  2. content-lengthヘッダーを正しく設定する(ファイルサイズに応じて)
  3. 読み込み用にファイルをオープンします (fopen を使うことができます)。
  4. ファイルを読み込んでその内容を出力ストリームに出力する
  5. 完了

また、 readfile 関数を使用して基本的に同じことを行うこともできます。 PHPのサイトの例を次に示します。

 <?php
$file = 'monkey.gif';

if (file_exists($file)) {
    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;
}
?>
 

  同じタグがついた質問を見る

phpsecurityfile-uploaddownload