2010-08-03 2 views
0

(ЭТО дубликата, я забыл TAG, ПОЖАЛУЙСТА ПРОСТИ)PHP Включает в Apache Защищенные паролем каталоги

Я пишу небольшую CMS для клиента, используя свою собственную небольшую базу, и я бегу в одном вопросе (не на 100% уверен, что это проблема, но я чувствую, что это будет).

Так, например, у меня есть класс News.php, который обрабатывает все мои обновления в блогах (ввод данных CMS) и вывод (отображение данных блога на фактическом сайте). Теперь, потому что это заставляет меня чувствовать себя более безопасным, я убираю все свои классы, связанные с CMS, в папке «admin», защищенной паролем.

Проблема возникает, когда мне нужно использовать мой отличный класс News.php для слоя «Вид» на сайте. Я предполагаю, что, поскольку класс будет находиться в папке, защищенной паролем (admin/includes), любому пользователю, просматривающему страницу блога, будет предложено указать пользователя и войти в эту папку, чтобы просмотреть содержимое блога.

Есть ли способ разрешить локальным файлам защищенные паролем каталоги, не запрашивая информацию о пользователе и пароле? (Или же это происходит?)

И ИЛИ

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

Заранее благодарим за ввод.

ответ

1

Функция php include() должна использовать локальную файловую систему и, следовательно, не связана афаксом .htaccess или другими механизмами контроля доступа пользователя.

На всей системе должно быть только 1 экземпляр вашего класса. Если он используется как/admin, так и пользовательскими частями, возможно, вы должны создать общую папку для размещения этих классов/функций общего назначения. Если доступ к файлу, содержащему только класс php, ничего не произойдет. Вы можете добавить .htaccess deny from all, если вы параноик, или если вам нравится использовать расширение файла .inc, которое будет проливать исходный код злоумышленнику.

+0

удивительный ответ, спасибо. Я писал свою административную область как совершенно другой сайт ... но, очевидно, проблема с дублирующимся классом просто избыточна. Я не уверен, почему я решил, что столкнулся с проблемой .htaccess. Я знаю, что с вызовами ajax мне часто приходится запускать полный URL-адрес (ajax особенно относится к безопасности xss). На мой взгляд, моя проблема заключается в том, когда я включаю или запускаю вызов ajax для класса, меняющего структуру каталогов, m звонит из ...поэтому, чтобы решить некоторые из этих проблем, я могу запустить полный url (используя переменные сервера) в свой файл, который будет перенаправлять меня через .htaccess. –

+0

@ Jascha Ваша озабоченность должна заключаться в различии между ** клиентом ** и ** сервером **. вы должны различать ** доступ к локальной файловой системе **, когда ваша программа работает с ** файловой системой **, от вызовов браузера на ваш сервер, которые выполняются через HTTP-соединение. Вызов AJAX является последним и не имеет ничего общего с файловой системой. Короче говоря, вы должны отличать файловую систему от HTTP –

+0

@ Col.Shrapnel, спасибо за ввод. Отличие двух определенно помогает моей логике. Я предполагаю, что моя более конкретная проблема заключается в том, как я могу положительно определить корень для моей файловой системы, если я не уверен, где будет находиться мой конечный файл? Прохождение через домен http://mysite.com/admin/myfile.php помогло, потому что я всегда могу отслеживать это. Но, если я вызываю класс обработчика AJAX, а затем в класс обработчика AJAX включаю больше классов, которым также требуются другие файлы (но на этот раз из другого места, потому что класс ajax находится в каталоге SAME). Как я могу убедиться, что у меня есть правильный путь к файлу? –

2

Вы не будете включать файлы через apache, чтобы эта проблема с паролем не существовала.

Если вы хотите защитить свои включенные, поместите их вне корневого каталога www, и никто из внешнего мира не сможет получить к нему доступ.

+0

Если вы хотите уточнить, как я могу обращаться к ним, если я пишу местный путь? т.е. require_once ('includes/news.php') Я просто попробовал, и все получилось отлично. Если я выпишу полный URL, то есть requre_once ('http://domain.com/admin/includes/news.php'), я получаю ошибку доступа. Является ли PHP интерпретированием того, как я обращаюсь к этим файлам на основе пути? –

+0

@Jascha не пытается удаленно включать файлы (с помощью domain.com). Введите относительный путь к файлу. Если вы не хотите, чтобы удаленные пользователи напрямую обращались к news.php, переместите этот файл за пределы www-root (где индекс) и включите его оттуда. – baloo

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