HumHubをインストールしたら最初にやっておくべきこと

概要

HumHubをインストールしたら、最初に行ったほうがよいセキュリティ対策など。

目次

  1. Protected、その他dotfileを公開ディレクトリより上に設置する
  2. index.phpの書き換え
  3. index-test.phpの書き換え
  4. URLのGETパラメータをキレイにする
  5. ユーザーのPasswordの文字数を制限する
  6. ユーザー名は半角英数字、ハイフン、アンダーバーのみ使用を許可する
  7. ログインなしでもコンテンツを閲覧できるようにする場合
  8. 本番リリースの際はDebugモードを無効にする
  9. バックアップについて

関連

Protected、その他dotfileを公開ディレクトリより上に設置する

デフォルトでは、全てのファイルが公開ディレクトリより下に設置される。

.htaccessで、protectedディレクトリ以下をブラウザから直接参照できないようにはなっているが、セキュリティ的に良くないので、protected、また以下のファイルを公開ディレクトリより上に移動させる。

  • protected
  • composer.json
  • package.json
  • .codeclimate.yml
  • .editorconfig
  • .travis.yml
  • CONTRIBUTING.md
  • ruleset.xml

index.phpの書き換え

index.phpを以下に書き換えてください。

  • 変更点
    • requireされているprotectedディレクトリのパスを変更する
<?php

/**
 * @link https://www.humhub.org/
 * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
 * @license https://www.humhub.com/licences
 */

// comment out the following two lines when deployed to production
if ($_SERVER['ENV'] == 'development') {
    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');
}

-require(__DIR__ . '/protected/vendor/autoload.php');
-require(__DIR__ . '/protected/vendor/yiisoft/yii2/Yii.php');
+require(__DIR__ . '/../protected/vendor/autoload.php');
+require(__DIR__ . '/../protected/vendor/yiisoft/yii2/Yii.php');

$config = yii\helpers\ArrayHelper::merge(
-    require(__DIR__ . '/protected/humhub/config/common.php'),
-    require(__DIR__ . '/protected/humhub/config/web.php'),
-    (is_readable(__DIR__ . '/protected/config/dynamic.php')) ? require(__DIR__ . '/protected/config/dynamic.php') : [],
-    require(__DIR__ . '/protected/config/common.php'),
-    require(__DIR__ . '/protected/config/web.php')
+    require(__DIR__ . '/../protected/humhub/config/common.php'),
+    require(__DIR__ . '/../protected/humhub/config/web.php'),
+    (is_readable(__DIR__ . '/../protected/config/dynamic.php')) ? require(__DIR__ . '/../protected/config/dynamic.php') : [],
+    require(__DIR__ . '/../protected/config/common.php'),
+    require(__DIR__ . '/../protected/config/web.php')
);

(new humhub\components\Application($config))->run();

index-test.phpの書き換え

index-test.phpを以下に書き換えてください。

  • 変更点
    • irequireされている、protectedディレクトリのパスを変更する
    • localhost以外からこのファイルにアクセスされた場合は、index.phpにリダイレクトさせる
<?php

/**
 * @link https://www.humhub.org/
 * @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
 * @license https://www.humhub.com/licences
 */
// NOTE: Make sure this file is not accessible when deployed to production
if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
-    die('You are not allowed to access this file.');
+    header('Location: /');
}

/*defined('YII_DEBUG') or define('YII_DEBUG', true);*/
defined('YII_ENV') or define('YII_ENV', 'test');
defined('YII_ENV_TEST') or define('YII_ENV_TEST', true);

-require(__DIR__ . '/protected/vendor/autoload.php');
-require(__DIR__ . '/protected/vendor/yiisoft/yii2/Yii.php');
+require(__DIR__ . '/../protected/vendor/autoload.php');
+require(__DIR__ . '/../protected/vendor/yiisoft/yii2/Yii.php');

$config = yii\helpers\ArrayHelper::merge(
    // add more configurations here
-    (is_readable(__DIR__ . '/../protected/humhub/tests/codeception/config/dynamic.php')) ? require(__DIR__ . '/../protected/humhub/tests/codeception/config/dynamic.php') : [],
-    require(__DIR__ . '/../protected/humhub/tests/codeception/config/acceptance.php')
+    (is_readable(__DIR__ . '/protected/humhub/tests/codeception/config/dynamic.php')) ? require(__DIR__ . '/protected/humhub/tests/codeception/config/dynamic.php') : [],   
+    require(__DIR__ . '/protected/humhub/tests/codeception/config/acceptance.php')
);

(new humhub\components\Application($config))->run();

URLのGETパラメータをキレイにする

以下を参照。

ユーザーのPasswordの文字数を制限する

パスワードの文字数制限が、変更時には指定されているが、何故か新規登録時には指定されていないので、以下を追記する。

protected/humhub/modules/user/models/Password.php

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['newPassword', 'newPasswordConfirm'], 'required', 'on' => 'registration'],
            [['newPassword', 'newPasswordConfirm'], 'trim'],
+           [['newPassword', 'newPasswordConfirm'], 'string', 'min' => 6, 'max' => 255],
            [['user_id'], 'integer'],
            [['password', 'salt'], 'string'],
            [['created_at'], 'safe'],
            [['algorithm'], 'string', 'max' => 20],
            [['currentPassword'], CheckPasswordValidator::className(), 'on' => 'changePassword'],
            [['newPassword', 'newPasswordConfirm', 'currentPassword'], 'required', 'on' => 'changePassword'],
            [['newPassword', 'newPasswordConfirm'], 'string', 'min' => 6, 'max' => 255, 'on' => 'changePassword'],
            [['newPassword'], 'unequalsCurrentPassword', 'on' => 'changePassword'],
            [['newPasswordConfirm'], 'compare', 'compareAttribute' => 'newPassword', 'on' => 'changePassword'],
            [['newPasswordConfirm'], 'compare', 'compareAttribute' => 'newPassword', 'on' => 'registration'],
        ];
    }

ユーザー名は半角英数字、ハイフン、アンダーバーのみ使用を許可する

以下を参照。
HumHubでvalidationルールを追加する

ログインなしでもコンテンツを閲覧できるようにする場合

管理ユーザーで、Administration 管理メニューへ行く。
URL: /index.php?r=admin%2Fauthentication

左メニューのユーザー -> 設定タブ の順に進み、以下にチェックを入れると、ログインしていなくても、一部のページの閲覧が可能になります。

Allow limited access for non-authenticated users (guests)

デフォルトではチェックは入っていません。

その他の公開に関する設定もこちらで行えます。

本番リリースの際はDebugモードを無効にする

本番公開する場合は、index.phpの以下の箇所をコメントアウトし、画面にエラーログなどが表示されないようにします。

// comment out the following two lines when deployed to production
// defined('YII_DEBUG') or define('YII_DEBUG', true);
// defined('YII_ENV') or define('YII_ENV', 'dev');

バックアップについて

以下は、ユーザーの行動によって、動的に中身が変わるディレクトリなので、バックアップを取ることをおすすめします。

dir desc
/protected/modules Admin管理画面でインストールしたモジュール群
/protected/config DBアカウントなどが書かれたdynamic.phpが動的に書き換わる
/uploads ユーザーがアップロードした画像など
/themes/yourtheme テーマを変更した場合に格納される

以上

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.