我意识到我的网站上有一个安全漏洞,特别是当它处于开发模式时。
问题是你可以在不登录的情况下访问用户指南/API浏览器。现在用户指南不是什么大事,但API浏览器有点令人担忧,因为我的所有代码都可以通过它看到。我有点担心,因为我有一些开发网站是公开的,所以其他人可以访问(尽管它们被阻止被索引)。
我看过Controller_Userguide,它并没有像其他控制器那样从另一个控制器扩展(例如模板)。相反,它是最终的控制器。在这种情况下,我无法将控制器at和something扩展到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浏览器
用户指南配置中有一个配置选项:
// 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;