2011-12-27 1 views
2

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

Но проблема в том, что поиск 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; 
     } 
    } 
} 

ответ

6

переместить файлы из общего каталога и использовать 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); 
}