php - 如何确保用户在访问 Kohana 用户指南和 API 浏览器之前已登录?

标签 php kohana kohana-3 kohana-auth

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

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

我查看了Controller_Userguide,它不像其他 Controller (例如模板)那样从另一个 Controller 扩展。相反,它是最终 Controller 。在这种情况下,我不允许将 Controller 扩展到 before() 方法。

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

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

关于如何实现这一目标还有其他想法吗?

最佳答案

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

我会在 Bootstrap 中添加类似的内容

//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 - 首先加载身份验证模块

我刚刚尝试过这个,似乎对我有用。在引导文件中,加载模块如下:

/**
 * 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;

关于php - 如何确保用户在访问 Kohana 用户指南和 API 浏览器之前已登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884511/

相关文章:

php - 如何使用 mysql 搜索子级别类别?

php - 使用存储过程批量更新表

php - Kohana 中的常量

model-view-controller - KO3 : How to deal with stylesheets and scriptfiles

Kohana ORM 关系问题

php - 小花 : How to load all many-to-many relationships in one query

php - Laravel 数据库外键

java - PHP SoapClient : Object passed is received as NULL in Java

php - 我在哪里放 $this->request->headers ('Content-Type' , 'application/json' );

php - 如何在 kohana 中链接图像?