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

问题描述:

我意识到我的网站有一点安全漏洞,特别是当它处于开发模式时。如何确保用户在访问Kohana用户指南和API浏览器之前登录?

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

我看了一下Controller_Userguide,并没有像其他控制器那样从其他控制器扩展(如模板)。相反,它是最终的控制者。这种情况不允许我将控制器扩展到before()方法。

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

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

有关如何完成此任何其他想法?

有没有理由让登录用户查看用户指南?

谨以此添加了一些引导

//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浏览器

有一个在userguide配置配置选项:

// 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; 
+0

我已经这样做了,但我担心的是,如果开发的网站是公开的,则用户指南(和其他人)也可以访问公开(与客户我所有的专有代码一起)。 – 2012-03-27 06:48:30

+0

只有当环境设置为开发,但如果它不是然后用户指南模块从未加载,因此任何人都无法访问它 – 2012-03-27 06:50:27

+0

也许我很困惑,但在我的情况下,发展网站是公开的,所以任何人可以访问用户指南和API浏览器。以下是其开发者网站上公开的其他人的API浏览器示例:http://dev.morgan.ly/kohana/v3.2/guide/api/Deputy(并由Google索引)。 – 2012-03-27 06:53:45