2

特に開発モードの場合、サイトにセキュリティホールが少しあることに気づきました。

問題は、ログインしなくてもユーザーガイド/ APIブラウザーにアクセスできることです。ユーザーガイドは大したことではありませんが、APIブラウザーはすべてのコードが表示されるため、少し心配です。私の開発サイトのいくつかは公開されているので、他の人がアクセスできるので少し心配です(ただし、それらはインデックスに登録されないようにブロックされています)。

Controller_Userguideを確認しましたが、他のコントローラー(テンプレートなど)のように別のコントローラーから拡張されていません。代わりに、それが最終的なコントローラーです。この場合、コントローラーをbefore()メソッドに拡張することはできません。

ユーザーがログインしていないときにモジュールを除外することを考えましたが、認証モジュールがまだロードされていないため、除外できません。

私はすでに開発サイトにいるときにユーザーガイド(および他のモジュール)だけを含めているので、これは役に立ちますが、このセキュリティとは呼びません。

これを達成する方法に関する他のアイデアはありますか?

4

1 に答える 1

2

ログインしたユーザーがユーザーガイドを表示できるようにする理由はありますか?

このようなものをブートストラップに追加します

//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 へのルートが見つからないためにユーザーガイド テンプレートがクラッシュするバグです。

これを機能させるために (更新があるまで) 努力したい場合は、28 行目から 30 行目をコピー/modules/userguide/views/userguide/template.phpして、次のよう/application/views/userguide/template.phpに置き換えます。

<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-27T06:45:38.203 に答える