ログイン時のみusernameにsuffixを付けたい【セキュリティ対策のため】

ログイン時のみusernameにsuffixを付けたい【セキュリティ対策のため】

- Soichi Watanabe の投稿
返信数: 2

渡邊です。いつもお世話になります。
./login/index.phpあたりを変更して,ログイン時のみusernameにsuffixを付けたいと思っております。
例えば,usernameがtokugawaであれば,内部的にはすべてtokugawaで扱いたいのですが,ログイン名がtokugawaだと安易に推測できるユーザ名で不安です。

そこで,ログイン画面で入力する際のみ,tokugawa!keyと入力し,ログイン処理の際に,!keyが付いていないとFailさせて,!keyが付いているときはそれを取り除いて通常のログイン処理をさせたいと思っております。そのようなことは可能でしょうか。

また,安全性に関しては,config.phpで$CFG->disablelogintoken = false;がデフォルトなので,Webサービスやモバイル機能をOffにしておけば,このログイン画面を経由しないアクセスはすべて遮断されると考えております。抜け道はあるでしょうか。

使用環境
Moodle3.5,Centos7,Postgresql, Boostテーマ

ご多忙中のところ本当に申し訳ありません。なにとぞよろしくお願い申し上げます。

Soichi Watanabe への返信

Re: ログイン時のみusernameにsuffixを付けたい【セキュリティ対策のため】

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

> また,安全性に関しては,config.phpで$CFG->disablelogintoken = false;がデフォルトなので,Webサービスやモバイル機能をOffにしておけば,このログイン画面を経由しないアクセスはすべて遮断されると考えております。抜け道はあるでしょうか。

「抜け道」はないと思います。

> そこで,ログイン画面で入力する際のみ,tokugawa!keyと入力し,ログイン処理の際に,!keyが付いていないとFailさせて,!keyが付いているときはそれを取り除いて通常のログイン処理をさせたいと思っております。そのようなことは可能でしょうか。

可能です。

以下のプログラム修正ではいかがでしょうか。

修正対象ファイル:
config.php

修正箇所:
28行目

[ 修正前 ]
require_once(__DIR__ . '/lib/setup.php');

// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!


[ 修正後 ]
require_once(__DIR__ . '/lib/setup.php');

$CFG->passwordsuffix = '任意の接尾辞';

// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!

----------

修正対象プログラム:
login/index.php

修正箇所:
135行目

[ 修正前 ]
/// Check if the user has actually submitted login data to us

if ($frm and isset($frm->username)) {                             // Login WITH cookies

    $frm->username = trim(core_text::strtolower($frm->username));

[ 修正後 ]
/// Check if the user has actually submitted login data to us

if ($frm and isset($frm->username)) {                             // Login WITH cookies

    $frm->username = trim(core_text::strtolower($frm->username));

    if (isset($CFG->passwordsuffix)) {
       if (preg_match("/$CFG->passwordsuffix$/", $frm->username)) {
           $frm->username = preg_replace("/$CFG->passwordsuffix$/", "", $frm->username);
       } else {
           $frm->username = $frm->username.rand();
       }
    }
評点平均: お役立ち度: ★★★★★★★ (1)
Mitsuhiro Yoshida への返信

Re: ログイン時のみusernameにsuffixを付けたい【セキュリティ対策のため】

- Soichi Watanabe の投稿
渡邊です。目的の動作が達成できました。
パスワードリスト攻撃など,第三者が類推できるID名での運用が怖かったのでとても助かりました。
また,今後の応用にも役立つ書き方を教えていただいて本当にありがとうございました。