2

我意识到我的网站上存在一些安全漏洞,特别是当它处于开发模式时。

问题是您无需登录即可访问用户指南/API 浏览器。现在用户指南没什么大不了的,但 API 浏览器有点令人担忧,因为我的所有代码都可以通过它看到。我有点担心,因为我的一些开发站点是公开可用的,因此其他人可以访问(尽管它们已被阻止被索引)。

我已经查看了 Controller_Userguide,它没有像其他控制器一样从另一个控制器扩展(例如模板)。相反,它是最终的控制器。在这种情况下,我无法将控制器扩展至 before() 方法。

我想在用户未登录时排除该模块,但我不能,因为尚未加载 auth 模块。

在开发站点上,我已经只包括用户指南(和其他模块),所以这会有所帮助,但我不会称之为安全性。

关于如何实现这一点的任何其他想法?

4

1 回答 1

2

是否有任何理由允许登录用户查看用户指南?

我会在引导程序中添加这样的东西

//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为其他内容,例如STAGINGTESTING

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

或者

SetEnv KOHANA_ENV TESTING //to the .htaccess file

选项 2 - 首先加载 auth 模块

我刚试过这个,似乎对我有用。在您的引导文件中,像这样加载模块:

/**
 * 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;
于 2012-03-27T06:45:38.203 回答