[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность и open_basedir
chee
inpost, писал давно в личку, в одной из тем он мне об этом напомнил
*Удалил часть контента*
Это была речь про ExampleCMS (для соревнования с twin), там была папка web для публичной части, а все скрипты находились выше на уровень. Пример тут https://bitbucket.org/cheevauva/examplecms/src

Но я не вижу проблемы, точне я не вижу что это проблема, которую надо решать в коде, она решается на уровне администрирования http-сервера. Если я не прав, то буду рад вашему мнению.


 ! 

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


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
ApuktaChehov
Может стоит пытаться писать код так, что бы нельзя было несанкционированно путешествовать по каталогам?
Например, запретить использовать в путях две точки подряд.
Везде использовать только относительный путь, который уже самим скриптом, будет дополняться до абсолютного.
Цитата

там была папка web для публичной части, а все скрипты находились выше на уровень.

У меня тоже есть такая папка для публичной части. Я в ней php вообще отрубил )

_____________
inpost
chee
Исправь свой вопрос так, чтобы он не нарушал личные данные каждого.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
chee
ApuktaChehov, тут про другое дело. inpost говорит что нужно своим скриптам задавать open_basedir, что бы сам php недавал подключиться выше определенной директории.

Но я не очень понял, почему мой скрипт вдруг стал уязвим, ведь open_basedir все еще можно применить для уровня где лежит код сайта, а на публичную часть выдавать то, что лежит в папке web, и делается это с помощью веб-сервера. Я не прав?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
ApuktaChehov
А open_basedir распространяется на виртуальные хосты? Это же настройка самого php.

А если так, то она распространяется на папку в которой работает php. А php работает в тех папках, который ему укажет веб сервер. Учитывая, что в open_basedir указывается имя директории, то каким образом её можно использовать на разные директории в приделах всего веб сервера(виртуальные хосты).

Остается настройка через .htaccess. Но если php_flag не работает? Оно бесполезно?

chee
Ну можно создать 2 папки в корне хоста. Публичную и прватную. В open_basedir указать приватную папку и тогда из публичной нельзя будет ничего подключить.
А в examplecms php файлы лежат в том же каталоге, что и паблик. Таким образом в examplecms применять open_basedir нет смысла.

_____________
chee
ApuktaChehov, я не понял твоего примера.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
ApuktaChehov
chee
У нас есть сайт.
Папки в корне сайта:
- Private. Тут лежат исполняемые php файлы.
- Public. Тут лежат картинки, css, js, шрифты и т.д.

Указываем в open_basedir каталог Private. И php не сможет подключить файлы из каталога Public. Так же в каталоге Private запрещаем доступ всем и вся.
Даже веб серверу, только исполнение файлов.

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

_____________
killer8080
Цитата (ApuktaChehov @ 14.05.2015 - 12:38)
Указываем в open_basedir каталог Private. И php не сможет подключить файлы из каталога Public.

а как же index.php ? Он то в public

UPD плюс директория для публичного аплоада то же в паблик.

Цитата (ApuktaChehov @ 14.05.2015 - 12:38)
Так же в каталог Private запрещаем доступ всем и вся. Даже веб серверу, только исполнение.

Без доступа на чтение скрипты работать небудут, а права на исполнение им может и не нужны, если сапи апача.
ApuktaChehov
Цитата
а как же index.php ? Он то в public

А он не должен быть в корне сайта? Т.е. в одном каталоге и с Private и с Public.

Цитата
UPD плюс директория для публичного аплоада то же в паблик.

Для загруженных файлов есть move_file_upload.

Цитата
Без доступа на чтение скрипты работать не будут,

Исполнение подразумевает чтение, иначе как система выполнит то, что не может прочесть smile.gif
Я имею виду, исполнение файлов интерпретатором php(веб сервером).

_____________
ApuktaChehov
На самом деле с index.php и в праву косяк.

Если open_basedir поставить на папку Private, то index.php нельзя будет исполнить.

Надо подумать...

_____________
killer8080
Цитата (ApuktaChehov @ 14.05.2015 - 13:08)
А он не должен быть в корне сайта? Т.е. в одном каталоге и с Private и с Public.

а разве нет? Могу конечно ошибаться, но rewrite htaccess пляшет от document root, и вроде выше прыгнуть не может.
Цитата (ApuktaChehov @ 14.05.2015 - 13:08)
Для загруженных файлов есть move_file_upload.

ну во первых open_basedir накладывает ограничение и на неё, во вторых не всегда нужно тупо переместить загруженный файл, иногда чаще всего, его нужно предварительно обработать, и в аплоад положить результат обработки.
Цитата (ApuktaChehov @ 14.05.2015 - 13:08)
Исполнение подразумевает чтение, иначе как система выполнит то, что не может прочесть

это справедливо только для скриптов, бинарникам не нужно право на чтение, достаточно права на исполнение чтоб его запустить. Ты же написал
Цитата (ApuktaChehov @ 14.05.2015 - 12:38)
Так же в каталоге Private запрещаем доступ всем и вся.
Даже веб серверу, только исполнение файлов.



PS пока писал ты уже ответил, но оставлю как есть
ApuktaChehov
chee
killer8080

Короче я понял, где косяк. Все было бы хорошо, если бы не index.php.
Похоже, open_basedir создана для защиты ОС от взлома из php. Что бы в принципе нельзя было обратиться к файлам вне вебсервера.

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

Тогда давайте дождемся inpost-а, для просветления rolleyes.gif

_____________
chee
Вот конфиг для nginx, кто мне мешает делать так?

location ~ \.php$ {
root /var/www/html/examplecms/web/;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/html/examplecms/";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}


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

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 13.05.2015 - 16:47)
Но я не вижу проблемы, точне я не вижу что это проблема, которую надо решать в коде, она решается на уровне администрирования http-сервера.

ну в общем то да, это чисто вопрос администрирования.
ApuktaChehov
chee
Вообщем я провел совещания, а после опросил присутствующих и в результате принял решение по твоему вопросу. smile.gif

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

_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.