如何确保用户在访问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
别的东西像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浏览器
有一个在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;
我已经这样做了,但我担心的是,如果开发的网站是公开的,则用户指南(和其他人)也可以访问公开(与客户我所有的专有代码一起)。 – 2012-03-27 06:48:30
只有当环境设置为开发,但如果它不是然后用户指南模块从未加载,因此任何人都无法访问它 – 2012-03-27 06:50:27
也许我很困惑,但在我的情况下,发展网站是公开的,所以任何人可以访问用户指南和API浏览器。以下是其开发者网站上公开的其他人的API浏览器示例:http://dev.morgan.ly/kohana/v3.2/guide/api/Deputy(并由Google索引)。 – 2012-03-27 06:53:45