Обработка разрешений PHP - PullRequest
2 голосов
/ 25 июня 2010

Привет, поэтому я пытаюсь создать форму загрузки изображений PHP.Я смог успешно справиться с этим, но только установив разрешения для папки, которую я загружаю в 777, или для чтения / записи / выполнения.Мне кажется, это не очень хорошая идея для больших и широких сетей.Я использую 000webhost, который, очевидно, дрянной, но это также лучший бесплатный веб-хостинг.Я считаю, что мне нужно как-то добавить любого пользователя, работающего с PHP (на 000webhost), в группу, а затем включить группу в разрешения на чтение / запись / выполнение, но оставить ее только для «чтения» для всех остальных.Однако я не знаю, как это сделать.В настоящее время я просто устанавливаю разрешения через Filezilla.Я не знаю, какой пользователь запускает PHP на веб-сервере, и я не знаю, как добавить этого пользователя, чтобы он имел отдельные групповые разрешения .... Кроме того, я думаю, что я хотел бы подобную настройку для пароляфайл, просто без чтения для всех остальных, поэтому форма может использовать php для проверки пароля перед загрузкой чего-либо.Спасибо

Ответы [ 4 ]

1 голос
/ 12 июля 2010

Вы должны быть очень осторожны, когда разрешаете веб-серверу доступ для записи в вашу систему, в частности, вы должны убедиться, что записываемая папка не может быть использована для загрузки скриптов в PHP.Вот как вы можете улучшить ситуацию:

  1. Создать папку для загрузок, которая находится вне корневого веб-каталога

  2. Добавить эту папку в качестве виртуального каталога

  3. Создайте правило, запрещающее доступ ко всем файлам в этой папке.Затем добавьте некоторые правила, разрешающие доступ к определенным типам (.gif, .png, .jpg, предположительно)

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

До сих пор нет гарантии, что кто-то не будет каким-либо образом загружать мошеннический PHP-скрипт в эту папку, но вам нужно просто установить столько защитных мернасколько это возможно.Здесь задействована некоторая конфигурация Apache, поэтому вам, возможно, придется немного покопаться в этом.Просто попробуйте в конце убедиться, что PHP не может быть запущен из вашей папки.

-phil

0 голосов
/ 25 июня 2010

CHMOD родительская папка 0777, затем PHP вызов mkdir () для создания папки.Владелец папки будет таким же, как владелец процесса PHP, и вы сможете move_uploaded_file() в эту папку.

Для иллюстрации, скажем, вам нужно загрузить в папку /app/myapp/data/images.Затем сначала удалите папку, если она существует, затем CHMOD /app/myapp/data/ до 0777. Наконец напишите простой PHP-скрипт в mkdir('/app/myapp/data/images');

Наконец, не забудьте сбросить разрешение родительской папки к исходному значению;)

0 голосов
/ 28 июня 2010

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

Самая большая проблема, с которой вы сталкиваетесь, - это способ, которым хост обрабатывает PHP (suPHP, DSO, CGI,mod_php).В зависимости от методов, которые они используют для загрузки, процессор PHP будет зависеть от того, как обрабатываются ваши разрешения.

В этом случае кажется, что PHP просто запускается как mod_php в Apache без запуска процесса какПользователь (сам).Его просто запускают как «никто».

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

Как только вы найдете новый веб-хост, который запускает phpSuExec (suPHP), вы заметите, что, вероятно, все начнёт работать с вашим скриптом, когда речь заходит о разрешениях.Однако вы не сможете снова использовать значение chmod, равное 777.Максимальное значение, которое вы сможете получить, - 755 из-за ограничений безопасности.

0 голосов
/ 25 июня 2010

Я не уверен, как ваш хост настроил свои вещи, но возможно заставить PHP-скрипты выполняться с разрешениями его владельца, используя такие вещи, как suPHP . Это не похоже на то, что ваш хост делает это, и в этом случае вы не можете помешать людям возиться с вашими файлами. Безопасность файловой системы является неотъемлемой проблемой общего хостинга. Если возможно, я бы порекомендовал получить VPS (виртуальный частный сервер) низкого уровня.

...