Как я могу убедиться, что пользователи вошли в систему перед доступом к Kohana Userguide & API Browser? - PullRequest
2 голосов
/ 27 марта 2012

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

Проблема в том, что вы можете получить доступ к Руководству пользователя / API-браузеру без входа в систему.Теперь руководство пользователя не имеет большого значения, но API-браузер вызывает некоторое беспокойство, поскольку весь мой код виден через него.Я немного обеспокоен, потому что некоторые из моих сайтов разработки доступны публично, поэтому другие могут получить к ним доступ (хотя они заблокированы от индексации).

Я посмотрел на Controller_Userguide, и это не такрасширены с другого контроллера, как и другие контроллеры (например, шаблон).Вместо этого это последний контроллер.В этом случае я не могу расширить контроллер и кое-что до метода before ().

Я думал об исключении модуля, когда пользователи не вошли в систему, но я не могу, потому чтоМодуль auth еще не загружен.

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

Есть еще идеи, как этого добиться?

1 Ответ

2 голосов
/ 27 марта 2012

Есть ли какая-либо причина, позволяющая зарегистрированным пользователям просматривать руководство пользователя?

Я бы добавил что-то подобное в загрузчик

//Add modules that are only relevant to local development
if(Kohana::$environment == Kohana::DEVELOPMENT)
{
    Kohana::modules(array_merge(Kohana::modules(), array(
        'codebench'  => MODPATH.'codebench',  // Benchmarking tool
        'userguide'  => MODPATH.'userguide',  // User guide and API documentation
        'unittest'   => MODPATH.'unittest',   // Unit testing
    )));
}

тогда любые общедоступные сайты просто меняют $environment на что-то еще, например STAGING или TESTING

Kohana::$environment = Kohana::TESTING //In the bootstrap file

С другой стороны

SetEnv KOHANA_ENV TESTING //to the .htaccess file

ВАРИАНТ 2 - Сначала загрузить модуль авторизации

Я только что попробовал это, похоже, работает для меня. В своем файле начальной загрузки загрузите модули так:

/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
    'auth'       => MODPATH.'auth',       // Basic authentication
    'cache'      => MODPATH.'cache',      // Caching with multiple backends

    'database'   => MODPATH.'database',   // Database access
    'image'      => MODPATH.'image',      // Image manipulation
    'orm'        => MODPATH.'orm',        // Object Relationship Mapping
));

//Add modules that are only relevant to testing
if(Kohana::$environment == Kohana::DEVELOPMENT and Auth::instance()->logged_in())
{
    Kohana::modules(array_merge(Kohana::modules(), array(
        'codebench'  => MODPATH.'codebench',  // Benchmarking tool
        'userguide'  => MODPATH.'userguide',  // User guide and API documentation
        'unittest'   => MODPATH.'unittest',   // Unit testing
    )));
}

Вариант 3 - Изоляция браузера API

В пользовательской конфигурации есть опция конфигурации:

// Enable the API browser.  TRUE or FALSE
    'api_browser'  => TRUE,

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

Если вы хотите приложить все усилия, чтобы заставить это работать (до обновления), затем скопируйте /modules/userguide/views/userguide/template.php в /application/views/userguide/template.php и затем замените строки с 28 по 30 следующим:

<li class="api">
    <a href="<?php echo (Kohana::$config->load('userguide.api_browser') === TRUE)?Route::url('docs/api'):'#'; ?>"><?php echo __('API Browser') ?></a>
</li>

и поместите это в /application/config/userguide.php:

<?php defined('SYSPATH') or die('No direct script access.');
$config = array();
if(Kohana::$environment == Kohana::DEVELOPMENT and Auth::instance()->logged_in())
{
    $config['api_browser'] = FALSE;
}
return $config;
...