2010-05-22 2 views
1

Рассмотрим простую систему загрузки файлов, написанную на php. Пользователь имеет доступ только в панели администратора. (Не FTP). Он может изменить опцию папки с 707 до 755 для обеспечения безопасности. Как это сделать? Можем ли мы сделать это из сценария загрузки? Если да, это безопасное приложение?Файловая система и безопасность (PHP)

+0

Что пользователь может делать вы ссылаетесь? Владелец сайта или пользователь сайта? –

+1

Последний номер в chmod - это глобальный доступ, имеющий 7 или 5 дает каждому пользователю доступ к вашим файлам. Вам нужно chmod 700 и не следует позволять вашему другу давать вам рекомендации по безопасности. – rook

ответ

3

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

bool chmod ( string $filename , int $mode ) 

Попытки изменить режим указанного файла, приведенного в режиме.

0

Похоже, вы не понимаете, как работает веб-сервер. Он имеет только один system user и нет необходимости изменять какие-либо разрешения для site users.

Для реализации функции ACL, одна нужна база данных для хранения пользователей и прав, а также некоторую ручной реализации методы загрузки, простые один (собственные заголовки + ReadFile()) или один из более сложных решений, как Nginx-х x_accel_redirect

+0

Пользователь может загрузить изображение. Как насчет папки chmod в этом случае? Папка всегда может быть в 707? А как насчет безопасности? – Felicita

+0

@ Разрешения должны быть установлены только для того, чтобы сайт работал. И зависит от настройки сервера, а не от мыслимых «проблем безопасности». –

2

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

2

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

function WhitePage($page) { 

     $info2 = apache_lookup_uri('src/index.php?p=' . $page); 

     list($arg, $val) = explode("=", $info2->args); 

     $myrequest = basename(htmlspecialchars_decode($val)); 

     return $myrequest; 
    } 

    function Read_Dir($dir, $array = array()) { 
     $dh = opendir($dir); 
     $files = array(); 
     while (($file = readdir($dh)) !== false) { 
      $flag = false; 
      if ($file !== '.' && $file !== '..' && !in_array($file, $array)) { 
       $files[] = trim($file); 
      } 
     } 
     return $files; 
    } 

    function WhiteList($page = null) { 
     $info2 = apache_lookup_uri('src/index.php?p=' . $page); 
     list($arg, $val) = explode("=", $info2->args); 
     // basename from the std class 
     $myrequest = basename(htmlspecialchars_decode($val)); 

     $myrequest = trim($myrequest . '.php'); 
     //pathinfo from the std class 
     $path = pathinfo($info2->filename); 
     // get the files array 
     $whitefiles = Read_Dir($path['dirname']); 

     if (in_array($myrequest, $whitefiles, true)) { 

      $res = 1; 
     } else { 

      $res = 0; 
     } 
     return $res; 
    } 

    // this is solution of this kind of the problems 
    //$p='index.php?p=../../../../../../../../etc/passwd%00index.html'; 
    $p = '../../../../../../../../etc/passwd%00index.html'; 
    $p = WhitePage($p); 
    $result = WhiteList($p); 

    if ($result) { 
     echo 'ok'; 
    } else { 
     echo 'Die ,You evil hacker'; 
    } 
+0

. Эти скрипты удаляют все грязные вещи, а также проверяют список белых файлов из каталога. Если файл существует в каталоге, то результат будет истинным, иначе попытка взлома –

+0

hi lehal2, вы должны отредактировать свой ответ, а не добавлять комментарий, таким образом, это более очевидно для людей, которые видят ваш ответ дальше. –

Смежные вопросы