Как сделать определенные файлы доступными только для сценариев PHP? - PullRequest
0 голосов
/ 22 апреля 2011

Я создаю CMS, и главная страница (index.php) создается из множества маленьких файлов в каталоге CMS. Например, структура может быть такой:

index.php
menu/admin/content.php
           config.php
           requests.php

menu/tools/content.php
           config.php
           requests.php

menu/users/content.php
           config.php
           requests.php

Когда я получаю доступ к index.php в корневом каталоге, я получаю другой результат, основанный на параметрах $_GET. Например, когда я получаю доступ к index.php?section=tools, индексный файл загружает файлы content, cofnig и requests из папки menu/tools/.

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

Чтобы продемонстрировать, что может произойти: если я хочу что-то удалить, я использую index.php?section=tools&delete=5, а в файле menu/tools/requests.php я бы проверил, установлено ли $_GET['delete'], а затем удалил идентификатор 5 из БД. Теперь проблема в том, что, если кто-то знал фактическую структуру, он (а) мог бы получить доступ к файлу requests.php следующим образом: site.com/admin/menu/tools/requests.php?delete=5 и таким образом взломать сайт.

Есть ли способ предотвратить подобные атаки? Что-то, чтобы запретить доступ к файлам в папке меню, но все же разрешить доступ к ним из моего файла index.php? Htaccess возможно? Я действительно не хочу ставить проверку (если установлен сеанс / cookie) для каждого отдельного файла в папке 'menu', хотя это было бы возможным решением.

Ответы [ 3 ]

3 голосов
/ 22 апреля 2011

Создайте .htaccess в папке (папках), доступ к которой вы не хотите запрещать:

deny from all

Лучше всего иметь папку вне корневого веб-каталога.

1 голос
/ 22 апреля 2011

Лучший способ - переместить папку menu куда-нибудь за пределы корня документа веб-сервера. Таким образом, ни один URL-адрес не сопоставляется с menu/tools/requests.php, и ваша единственная проблема с безопасностью - это то, что вы делаете в index.php

0 голосов
/ 22 апреля 2011

Прежде всего, если кто-то вручную добавит аргументы GET и "взломает" сайт, возникнет проблема. В сценарии вы должны проверять аутентификацию пользователя, пытающегося выполнить эти действия, и если они аутентифицированы, тогда не должно быть никаких проблем. Я не думаю, что у кого-то возникнут проблемы с удалением чего-либо через GET param, когда они могут сделать это самостоятельно на интерфейсе.

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

CodeIgniter работает, устанавливая переменную, а затем в заголовке каждого скрипта,

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Вы также можете проверить $ _SERVER ['SCRIPT_FILENAME'], $ _SERVER ['SCRIPT_NAME'] или $ _SERVER ['PHP_SELF'], чтобы узнать, завершится ли его index.php, иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...