ZendFramework - Как защитить конфиденциальные файлы, загруженные в каталог public /? - PullRequest
2 голосов
/ 27 декабря 2011

Некоторые пользователи загружают туда конфиденциальные файлы договоров / соглашений, которые хранятся в каталоге /var/www/html/project/public/contract/<HERE_UNIQUE_FILES.pdf>.

Но проблема в поиске Google или прямой ссылке, которую может открыть любой неавторизованный пользователь и просмотреть / скопировать.

Как я могу защитить его, чтобы только мой домен или разрешенные одноранговые узлы могли иметь доступ только к этому личному каталогу?

Пример:

class Application_Model_Uploader
{

  public static function mvUploadContract()
  {     
        /* Anyone from outside can access this path, but how to protect it? */
        $target_path = APPLICATION_PATH . "/../public/contract/";          
        $target_path = $target_path .  basename( $_FILES['contractfile']['name']);
        if(move_uploaded_file($_FILES['contractfile']['tmp_name'], $target_path)) 
        {
            $result = true;
        }else{
            $result = false;
        }
  }
}

1 Ответ

6 голосов
/ 27 декабря 2011

Переместите файлы из общедоступного каталога и используйте PHP для их потоковой передачи после авторизации пользователя.

if (is_authorized($user)) {
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename='.basename($path_to_file_outside_public));
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate');
  header('Pragma: public');
  header('Content-Length: ' . filesize($path_to_file_outside_public));

  readfile($path_to_file_outside_public);
}
...