我意识到我的网站上存在一些安全漏洞,特别是在开发模式下。
问题是您无需登录即可访问用户指南/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
更改为其他内容,例如 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;
关于php - 如何确保用户在访问 Kohana 用户指南和 API 浏览器之前已登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884511/