разрешения для папок и файлов php - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть несколько вопросов о том, как работают разрешения для папок и файлов. скажем, у меня есть каталоги пользователей вне «защищенных», как показано ниже ..

users
  -- usera
    -- docs
  -- userb
    -- docs
protected

Я не хочу, чтобы пользователь B, у которого нет прав, имел доступ к чему-либо в каталогах пользователя A. Кроме того, я не хочу, чтобы кто-либо доступ к каталогу каталогов через ссылки URL. в основном я просто хочу, чтобы пользователи могли иметь доступ к своим собственным каталогам, и никому другому. как это можно сделать?

спасибо!

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Я ответил на симуляционный вопрос здесь ограничение пользователей подкаталогами , которые вы должны быть в состоянии настроить в соответствии со своими потребностями, я также скопировал его здесь.

Download.php

<?php
/** Load your user assumed $user **/

$file = trim($_GET['file']);

/** Sanitize file name here **/

if (true === file_exists('/users/user'.$user->id.'/'.$file)) {
   //from http://php.net/manual/en/function.readfile.php
   header('Content-Description: File Transfer');
   header('Content-Type: application/octet-stream');
   header('Content-Disposition: attachment; filename="'.$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;
} else {
   throw new Exception('File Not Found');
}

.htaccess Чтобы запретить все прямые загрузки файлов

deny from all

Затем вы бы связались с папками, используя /download.php?file=filename.ext, и он только загрузит этофайл из каталога пользователей текущего пользователя.

Вы должны убедиться, что вы дезинфицируете имя входного файла, чтобы вы не были уязвимы для эксплойтов через каталог.

1 голос
/ 25 ноября 2011

Без дополнительной информации я бы хотел убедиться, что каталоги пользователей находятся выше корневого веб-каталога. Это предотвратит их связь с. Затем создайте сценарий PHP, который подтверждает, что пользователь является тем, кем они себя называют. После того, как вы узнаете идентификацию вошедшего в систему пользователя, вы можете использовать fpassthru () (http://php.net/fpassthru) или аналогичный для доставки документов пользователю.

...