ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

- Soichi Watanabe の投稿
返信数: 4

渡邊です。いつもありがとうございます。

次の2点が気がかりでございます。実現性の有無やヒントなどの情報がありましたらなにとぞよろしくお願い申し上げます。

(1)教師は自分のコースにXSSを生じる攻撃コードが書けてしまいますが,Moodleの機能のみでこれを防ぐ方法はありますでしょうか。活動追加でファイルリソース追加機能しか利用しない教師がほとんどです。XSS信頼ユーザにしなくて済むように,「機能制限教師」(ファイル追加のみ可能)のユーザを設定することは可能でしょうか。

(2)埋め込み前であればWAFで検知できるのですが,ひとたび,コースに攻撃コードが埋め込まれてしまったときにそれを検知する方法がわからなくて悩んでおります。埋め込まれてしまった後の検知方法やツールに関する情報(キーワードのみでもとても助かります)がありましたらなにとぞよろしくお願い申し上げます。

動作環境 Moodle3.5.2+,CentOS7, PostgreSQL

評点平均: お役立ち度: ★★★★★★★ (1)
Soichi Watanabe への返信

Re: ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

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

すでにご存知かもしれませんが、「管理 > サイト管理 > 開発 > 実験用 > 実験用設定」ページで「すべての場所のコンテンツをクリーニングする forceclean」を有効にすることにより、例えば下記のようなコードをリソースの「ページ」または「ラベル」を使ってコースに埋め込んだとしても実行できないようにすることは可能です。

<script>alert(document.cookie)</script>
添付 moodle_code.png
評点平均: お役立ち度: ★★★★★★★ (2)
Mitsuhiro Yoshida への返信

Re: ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

- Soichi Watanabe の投稿

いつもありがとうございます。forcecleanにチェックを入れました。

ブラウザのソースコード表示


(「危険なコードを消去した」という記録はログに残らないようでしたが,)4行目に故意に入れていた危険なコードが消去されて安全になりました。

当面,これで安心して運用できそうです。本当にありがとうございました。



Soichi Watanabe への返信

Re: ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

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

下記のようにプログラムを修正することにより、問題のあるコードが埋め込まれたコースの該当箇所のページURLがApacheのログファイルに記録されるかと思います。

修正対象プログラム:
lib/weblib.php

修正箇所:
1273行目

[ 修正前 ]

    if ($options['filter']) {
        $filtermanager = filter_manager::instance();
        $filtermanager->setup_page_for_filters($PAGE, $context); // Setup global stuff filters may have.
        $filteroptions = array(
            'originalformat' => $format,
            'noclean' => $options['noclean'],
        );
    } else {
        $filtermanager = new null_filter_manager();
        $filteroptions = array();
    }

    switch ($format) {
        case FORMAT_HTML:

[ 修正後 ]

    if ($options['filter']) {
        $filtermanager = filter_manager::instance();
        $filtermanager->setup_page_for_filters($PAGE, $context); // Setup global stuff filters may have.
        $filteroptions = array(
            'originalformat' => $format,
            'noclean' => $options['noclean'],
        );
    } else {
        $filtermanager = new null_filter_manager();
        $filteroptions = array();
    }

    if (!empty($CFG->forceclean) && preg_match('/\<script\>/i', $text)) {
        if ($_SERVER["HTTPS"] == "on") {
            $pageurl = 'https://';
        } else {
            $pageurl = 'http://';
        }
        $pageurl .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        error_log('HTML sanitization: ' . $pageurl);
    }

    switch ($format) {
        case FORMAT_HTML:
評点平均: お役立ち度: ★★★★★★★ (2)
Mitsuhiro Yoshida への返信

Re: ファイルリソース追加の機能しか利用しない教師とXSS信頼ユーザについて

- Soichi Watanabe の投稿

サニタイズ結果をログに出力する方法について教えていただきまして本当にありがとうございました。

preg_match('/\<script\>/i', $text))
については、<script type="text/javascript">などでも検出できるように、
preg_match('/\<script.*\>/i', $text))に変更しました。

CentOS7のデフォルトで、ssl_error_logへのログ出力も確認しました。


少しずつですが、Moodleの仕組みが見えてきてとてもうれしく感じております。

評点平均: お役立ち度: ★★★★★★★ (2)