1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
1

Защита доступа к файлам

11.08.2014, 15:45. Показов 1408. Ответов 12
Метки нет (Все метки)

Пишу простой движек.
Любой url обрабатывается из главного index файла.
Также есть файл config.ini

Вот что происходит при таких запросах:

site/config.ini //появляется сам файл
site/имя_файла.php // что-то непонятное ( в зависимости от скрипта )

А должно (по инструкциям index.php) выводится ошибка 404

Как можно запретить доступ к файлам ( не php )
И как переадресовывать с php на index.php

В каком-то движке видел, что в каждой папке есть файл index.html и в каждом файле прописано условие

PHP
1
   if (! имя переменной из index.php) exit();
Эффективно ли это?? Или есть какие-то еще способы?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2014, 15:45
Ответы с готовыми решениями:

Закрытие доступа к нежелательным файлам
Итак, php скрипт читает информацию из текстового файла 1.txt Php скрипт очень умный и поэтому он...

Способы доступа к файлам на сайте
Добрый день! Сам я в вебпрограммировании новичок и прошу совета у более опытных людей :) Есть...

Защита контента от прямого доступа
Здравствуйте! if (empty($_SERVER)) die(); На сколько серьёзно можно относиться к такой...

Как установить права доступа к папке и всем файлам в папке?
Здравствуйте. Как установить права доступа к папке и всем файлам в папке? Для папки 555, для...

12
SV
55 / 55 / 25
Регистрация: 03.08.2014
Сообщений: 258
11.08.2014, 16:31 2
1. запретить доступ к не-пхп файлам очень просто, но делается это средствами веб-сервера
2. если вы запрости имя_файла.php то кого волнуют инструкции в index.php? Если вы запускаете одну программу - то почему вы ждете выполнения другой программы?
3. по поводу index.html в каждой папке - это такой способ что бы не было листинга директории в криво настроенном веб-сервере например.

Вообще, лично я обычно делаю следующим образом

Есть 2 папки, например "src" и "public"
В паблике из PHP кода только index.php, остальное - всяки жаваскрипты и прочее.
Все исходники движка в папке src
Веб-сервер видит только папку public, всё что выше - для него не существует. И по умолчанию он запускает именно index.php а остальное передаёт ему параметрами. А уже index.php подгрузит нужные ему файлы из src
1
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
11.08.2014, 18:12  [ТС] 3
Цитата Сообщение от SV Посмотреть сообщение
Есть 2 папки, например "src" и "public"
Но если снаружи только 2 папки, то как будет открывать public/index.php если он не в корневой директории?
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 17
11.08.2014, 19:07 4
Если любой url обрабатывается в index.php, то, скорее всего, в нем же и должны инициализироваться классы, компоненты и тд и тп, но не в других файлах.
Например мы юзаем шаблонизатор ololo. В index.php Пишем
PHP
1
2
3
4
include 'ololo.php';
$tpl = new ololo;
//Выводим информацию
$tpl->render('Hello World!');
У нас так же есть файл forum.php,он тоже выводит информацию, но в его коде не инклудим файл шаблонизатора и не создаем экземпляр класса(это делается в index.php), а сразу выводим текст
PHP
1
$tpl->render('THis is SPARTAAAA!');
И если идет прямое обращение к form.php, он вываливается в ошибку, которую мы и отлавливаем и создаем, например, исключение с 404 ответом
0
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
11.08.2014, 19:11  [ТС] 5
Цитата Сообщение от SeeNoos Посмотреть сообщение
Если любой url обрабатывается в index.php
Я этого пытаюсь добиться, но если же я введу site.ru/form.php, то будет загружаться именно этот файл, а не index.php
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 17
11.08.2014, 19:19 6
Цитата Сообщение от Igor Fender Посмотреть сообщение
Я этого пытаюсь добиться, но если же я введу site.ru/form.php, то будет загружаться именно этот файл, а не index.php
Он будет загружаться. Но вывалится в ошибку, потому как $tpl - не определена. И если ты хочешь переадресовать на index.php, отлови эту ошибку и сделай редирект на нужный адрес с нужными параметрами
0
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
11.08.2014, 19:23  [ТС] 7
SeeNoos, Теперь понял о чем вы.
Просто до этого у меня все работало немного по другому.
Url вида site/category/param1/param2
И индексный файл парсит и в зависимости от параметром вызывает соответствующие методы или модули и тд
То есть нельзя открыть никакой файл на сервере, все делает парсер
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 17
11.08.2014, 19:30 8
Как вариант в .htaccess можно написать регулярку, чтобы url типа site.ru/forum.php передавал в index.php/forum
1
SV
55 / 55 / 25
Регистрация: 03.08.2014
Сообщений: 258
11.08.2014, 19:35 9
Цитата Сообщение от Igor Fender Посмотреть сообщение
Но если снаружи только 2 папки, то как будет открывать public/index.php если он не в корневой директории?
Нет, снаружи только папка public, всё что в ней - веб-сервер видит, т.е. папка src ему не доступна.
Грубо говоря - public это и есть корневая директория, в ней index.php, а другие скрипы -лежат выше
1
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
12.08.2014, 00:27  [ТС] 10
Я не могу понять как работает такой движек.
Тоесть для каждой страницы свой файл??
А как подгружать меню и тп?

Все что я понимаю, так это парсинг url типа site/param1/param2
А как правильно обрабатывать параметры (site/index.php?cat=123&page=123) не могу разобраться...
Просто раньше использовал концепцию MVC и там структура движка проще...

Добавлено через 1 час 44 минуты
Немного разобрался и хочу переосмыслить свой вопрос:

Из вышесказанного, моя проект работает разбирая url вида ТОЛЬКО 123/123/123

Вот htaccess, который все адреса перенаправляет на index.php

PHP/HTML
1
2
RewriteEngine On
RewriteRule .* index.php [L]
Все работает, файлы сервера не доступны и все отлично, НО

1) Что делать есть я хочу вот такую url site/index.php?321=321&543=543 ??
Менять парсер или нужно менять структуру движка?

2) может ли htaccess не работать?? Если это так, то получается при его неактивности все серверные файлы будут доступны и это плохо. Как проверить, что с ним все в порядке?
0
Заблокирован
12.08.2014, 10:53 11
Не всегда содержимое папок, лежащих "выше", доступно. Можно закрывать доступ к отдельным папкам и в паблике. Можно в .htaccess соответствующих папок прописать запрет. Можно имена защищаемых файлов начинать с ".ht". Короче есть варианты.
0
1 / 1 / 0
Регистрация: 09.07.2014
Сообщений: 167
12.08.2014, 14:33  [ТС] 12
miketomlin, Ну это я понял.
Не могу разобраться со структурой движка с url site/index.php?dir=123&file=123
0
Заблокирован
12.08.2014, 15:02 13
Лучший ответ Сообщение было отмечено Igor Fender как решение

Решение

Можно парсер сменить. А лучше выбрать какой-то один базовый вариант и опираться на него. Лично я сейчас использую достаточно легкий и удобный вариант: /[mod[/cat]][?p=natural]. В cat при желании тоже можно использовать слэш-разделители. Также cat может быть как объектом в БД, так и произвольным параметром. Также для cat можно добавить контроль на соответствие natural (натуральному числу, содержащему не более N цифр).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2014, 15:02

Организация доступа к файлам через ftp
Стоит такая задача: на сайте будет специальный раздел для партнеров где они смогут, зайдя под...

Include - защита от прямого доступа
Есть страница которая собирается из других файлов с помощью include. Есть очень малая, но...

Разграничение доступа к файлам
Есть сайт на ASP (IIS 4.0). Необходимо разграничить доступ к большому числу файлов (архивов, html,...

Блокировка доступа к файлам
Здравствуйте! Подскажите, возможно ли написать приложение, которое бы следило за открывающимися...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.