Запретить доступ к файлам в простой системе входа в PHP - PullRequest
4 голосов
/ 02 октября 2010

Я написал ОЧЕНЬ простую систему входа в PHP:

<?php
    session_start();
    $error = '';

    if (isset($_POST['username']) && isset($_POST['password']))
    {
        if ($_POST['username'] == 'user' && $_POST['password'] == 'pass')
        {
            $_SESSION['client'] = 'ok';
            Header ("location: /kit/kit/index.php");
        }
        else
        {
            $error = 'Usuario o contrase&ntilde;a incorrectos.';
        }
    }

?>

Не беспокойтесь об уязвимости, это не защищает ничего ценного.

На каждой странице .php я добавляю:

<?php
    session_start();

    if (!isset($_SESSION['client']) || $_SESSION['client'] != 'ok')
    {
        Header ("location: /kit/index.php");
        die();
    }

?>

Это отлично защищает .php сессии.

Проблема в том, что это не защищает файлы.

Я имею в виду, если перейти непосредственно к:

что-то / другое / file.zip

будет загружать его, вошли вы в систему или нет.

Надеюсь, вопрос достаточно ясен, если нет, пожалуйста, спросите!

Ответы [ 5 ]

2 голосов
/ 02 октября 2010

Чтобы пользователь не мог видеть каталог, все, что вам нужно сделать, это создать страницу индекса в этой папке.Например: index.htm, index.html, default.htm, default.html.

Чтобы запретить пользователю входить в папку (например, запретить кому-либо просматривать http://www.yoursite.com/myFolder/),, вам может потребоваться доступ к некоторымВозможности вашего веб-хоста. Некоторые хосты позволяют защищать паролем файлы или папки. Вы также можете создать файл / папку .htaccess

Файл htaccess - это простой ASCII-файл, который вы можете создать с помощью текста.редактор, такой как NotePad или SimpleText. Многие люди, кажется, испытывают некоторую путаницу в отношении соглашения об именах для файла, поэтому позвольте мне уйти от этого.

.htaccess - это расширение файла. Это не file.htaccessили somepage.htaccess, он просто называется .htaccess

Создать файл

Чтобы создать файл, откройте текстовый редактор и сохраните пустую страницу как.htaccess (или введите один символ, так как некоторые редакторы не позволят вам сохранить пустую страницу). Скорее всего, ваш редактор добавит расширение имени по умолчанию к имени (например, для Блокнота это будетl файл .htaccess.txt).Вам нужно удалить расширение файла .txt (или другое), чтобы получить доступ к нему - да, я знаю, что это не слово, но звучит остро, не так ли?Вы можете сделать это, щелкнув правой кнопкой мыши по файлу и переименовав его, удалив все, что не говорит .htaccess.Вы также можете переименовать его через telnet или программу ftp, и вы должны быть достаточно знакомы с одним из них, чтобы не нуждаться в объяснении.

Файлы htaccess должны загружаться в режиме ASCII, а не в BINARY.Это делает файл доступным для сервера, но предотвращает его чтение браузером, что может серьезно подорвать вашу безопасность.(Например, если у вас есть каталоги, защищенные паролем, если браузер может прочитать файл htaccess, то они могут получить местоположение файла аутентификации, а затем выполнить обратный инжиниринг списка, чтобы получить полный доступ к любой части, которую вы ранее защищали.Существуют различные способы предотвратить это, один из которых заключается в том, чтобы поместить все ваши файлы аутентификации выше корневого каталога, чтобы они не были доступны для www, а другой - через серию команд htaccess, которая предотвращает доступ к себе через браузер, подробнее об этомпозже)

ПРОСТО ПРОЙТИ ОСТАНОВИТЬ пользователям возможность скачивать ваш файл

хранить все, что доступно для скачивания, в корне вашего документа.что означает перед файлом public_html.

РЕДАКТИРОВАТЬ: обновлен раздел ниже, чтобы показать графическое представление структуры папок

как вы тогда получаете к ним доступ?

work
    downloadableFiles
        downloadables
        -    memberOnlyFile.zip
        -    welcomePackage.zip
        -    memberhshipVideoVideo.mov    
        photos
        -    photo1.jpeg
        -    photo2.jpeg
    publi    c_html
    -   index.htm
        About
        -    about.html             
        -    about.gif
        LogIn
        -    login.htm
        -    loginScreen.htm
        -    loginFancyButton.gif

Теперь все, что находится в папке public_html, которую мир может увидеть через ваш веб-сайт.

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

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

Если мы на странице входа в систему, чтобы получить доступ к веб-странице loginScreen, вы просто записываете гиперссылку следующим образом:

<a href="loginScreen.htm">login screen</a>

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

Как бымы попадаем в эту папку, если мы находимся в папке входа в систему, когда мы просматриваем страницу loginScreen.htm, вы возвращаетесь на одну папку назад, и в итоге мы попадаем в папку public_html.затем мы возвращаемся к другой папке, поэтому мы находимся в рабочей папке.

, так что пока это будет выглядеть так.

.. / .. / что означает две папки назад.

затем для доступа к memberonlypath.zip нам нужно перейти в папку downloadableFiles, затем нам нужно войти в загружаемые файлы, а затем мы можем связать его с файлом membersOnlyFile.zip, который является файлом, который мы искали ранее.

, поэтому полная ссылка теперь становится

<a href="../../downloadableFiles/downloadable/membersOnlyFile.zip">download file</a>

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

Надеюсь, это поможет

PK

0 голосов
/ 02 октября 2010

«Статические» файлы обслуживаются веб-сервером, а не PHP, поэтому аутентификация обрабатывается по-разному.Есть два простых способа обойти это:

  • Обрабатывать всю аутентификацию на веб-сервере, например, с помощью базовой HTTP / дайджест-аутентификации HTTP.В Apache 2.2 есть полезное введение .
  • Служите файлам с помощью PHP, например, с помощью foo.php / path / to / file, если у вас включена функция "pathinfo" (согласно PHP документы вы устанавливаете AcceptPathInfo = ON в конфигурации сервера где-нибудь) или foo.php? Path = путь / к / файлу, что довольно ужасно, ну да ладно.

Естьболее корпоративное решение:

  • Напишите модуль проверки подлинности для вашего сервера загрузки, который распознает файлы cookie проверки подлинности с другого сайта.Это делают многие крупные сайты (вспоминается adcdownload.apple.com), отчасти для того, чтобы они могли сохранять загружаемые файлы в CDN, но при этом все еще имеют какой-то контроль доступа.

Есть обходной путь:

  • Вставьте все в «неузнаваемое» имя каталога (например, некоторые случайные символы base64).Убедитесь, что вы не можете перечислить родительский каталог (самый простой способ - создать пустой файл "index.html").
0 голосов
/ 02 октября 2010

Просто запустите скрипт загрузки php: этот , который получит файл в папке public_html.

0 голосов
/ 02 октября 2010

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

0 голосов
/ 02 октября 2010

Вам нужен .htaccess, чтобы запретить доступ к папке.

...