⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 3 页
字号:
    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_google';    $result->name    = get_string('check_google_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=sitepolicies\">".get_string('sitepolicies', 'admin').'</a>';    if (empty($CFG->opentogoogle)) {        $result->status = REPORT_SECURITY_OK;        $result->info   = get_string('check_google_ok', 'report_security');    } else if (!empty($CFG->guestloginbutton)) {        $result->status = REPORT_SECURITY_INFO;        $result->info   = get_string('check_google_info', 'report_security');    } else {        $result->status = REPORT_SECURITY_SERIOUS;        $result->info   = get_string('check_google_error', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_google_details', 'report_security');    }    return $result;}/** * Verifies email confirmation - spammers were changing mails very often * @param bool $detailed * @return object result */function report_security_check_emailchangeconfirmation($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_emailchangeconfirmation';    $result->name    = get_string('check_emailchangeconfirmation_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=sitepolicies\">".get_string('sitepolicies', 'admin').'</a>';    if (empty($CFG->emailchangeconfirmation)) {        if (empty($CFG->allowemailaddresses)) {            $result->status = REPORT_SECURITY_WARNING;            $result->info   = get_string('check_emailchangeconfirmation_error', 'report_security');        } else {            $result->status = REPORT_SECURITY_INFO;            $result->info   = get_string('check_emailchangeconfirmation_info', 'report_security');        }    } else {        $result->status = REPORT_SECURITY_OK;        $result->info   = get_string('check_emailchangeconfirmation_ok', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_emailchangeconfirmation_details', 'report_security');    }    return $result;}/** * Verifies if https enabled only secure cookies allowed, * this prevents redirections and sending of cookies to unsecure port. * @param bool $detailed * @return object result */function report_security_check_cookiesecure($detailed=false) {    global $CFG;    if (strpos($CFG->wwwroot, 'https://') !== 0) {        return null;    }    $result = new object();    $result->issue   = 'report_security_check_cookiesecure';    $result->name    = get_string('check_cookiesecure_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=httpsecurity\">".get_string('httpsecurity', 'admin').'</a>';    if (empty($CFG->cookiesecure)) {        $result->status = REPORT_SECURITY_SERIOUS;        $result->info   = get_string('check_cookiesecure_error', 'report_security');    } else {        $result->status = REPORT_SECURITY_OK;        $result->info   = get_string('check_cookiesecure_ok', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_cookiesecure_details', 'report_security');    }    return $result;}/** * Verifies config.php is not writable anymore after installation, * config files were changed on several outdated server. * @param bool $detailed * @return object result */function report_security_check_configrw($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_configrw';    $result->name    = get_string('check_configrw_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = null;    if (is_writable($CFG->dirroot.'/config.php')) {        $result->status = REPORT_SECURITY_WARNING;        $result->info   = get_string('check_configrw_warning', 'report_security');    } else {        $result->status = REPORT_SECURITY_OK;        $result->info   = get_string('check_configrw_ok', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_configrw_details', 'report_security');    }    return $result;}/** * Lists all users with XSS risk, it would be great to combine this with risk trusts in user table, * unfortunately nobody implemented user trust UI yet :-( * @param bool $detailed * @return object result */function report_security_check_riskxss($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_riskxss';    $result->name    = get_string('check_riskxss_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = REPORT_SECURITY_WARNING;    $result->link    = null;    $sqlfrom = "FROM (SELECT rcx.*                        FROM {$CFG->prefix}role_capabilities rcx                        JOIN {$CFG->prefix}capabilities cap ON (cap.name = rcx.capability AND ".sql_bitand('cap.riskbitmask', RISK_XSS)." <> 0)                       WHERE rcx.permission = ".CAP_ALLOW.") rc,                     {$CFG->prefix}context c,                     {$CFG->prefix}context sc,                     {$CFG->prefix}role_assignments ra,                     {$CFG->prefix}user u               WHERE c.id = rc.contextid                     AND (sc.path = c.path OR sc.path LIKE ".sql_concat('c.path', "'/%'")." OR c.path LIKE ".sql_concat('sc.path', "'/%'").")                     AND u.id = ra.userid AND u.deleted = 0                     AND ra.contextid = sc.id AND ra.roleid = rc.roleid";    $count = count_records_sql("SELECT COUNT(DISTINCT u.id) $sqlfrom");    $result->info = get_string('check_riskxss_warning', 'report_security', $count);    if ($detailed) {        $users = get_records_sql("SELECT DISTINCT u.id, u.firstname, u.lastname, u.picture, u.imagealt $sqlfrom");        foreach ($users as $uid=>$user) {            $users[$uid] = fullname($user);        }        $users = implode(', ', $users);        $result->details = get_string('check_riskxss_details', 'report_security', $users);    }    return $result;}/** * Verifies sanity of default user role. * @param bool $detailed * @return object result */function report_security_check_defaultuserrole($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_defaultuserrole';    $result->name    = get_string('check_defaultuserrole_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=userpolicies\">".get_string('userpolicies', 'admin').'</a>';;    if (!$default_role = get_record('role', 'id', $CFG->defaultuserroleid)) {        $result->status  = REPORT_SECURITY_WARNING;        $result->info    = get_string('check_defaultuserrole_notset', 'report_security');        $result->details = $result->info;        return $result;    }    // first test if do anything enabled - that would be really crazy!    $sql = "SELECT COUNT(DISTINCT rc.contextid)              FROM {$CFG->prefix}role_capabilities rc             WHERE rc.capability = 'moodle/site:doanything'                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $default_role->id";    $anythingcount = count_records_sql($sql);    // risky caps - usually very dangerous    $sql = "SELECT COUNT(DISTINCT rc.contextid)              FROM {$CFG->prefix}role_capabilities rc              JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability             WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG | RISK_DATALOSS))." <> 0                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $default_role->id";    $riskycount = count_records_sql($sql);    // default role can not have view cap in all courses - this would break moodle badly    $viewcap = record_exists('role_capabilities', 'roleid', $default_role->id, 'permission', CAP_ALLOW, 'capability', 'moodle/course:view');    // it may have either no or 'user' legacy type - nothing else, or else it would break during upgrades badly    $legacyok = false;    $sql = "SELECT rc.capability, 1              FROM {$CFG->prefix}role_capabilities rc             WHERE rc.capability LIKE 'moodle/legacy:%'                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $default_role->id";    $legacycaps = get_records_sql($sql);    if (!$legacycaps) {        $legacyok = true;    } else if (count($legacycaps) == 1 and isset($legacycaps['moodle/legacy:user'])) {        $legacyok = true;    }    if ($anythingcount or $riskycount or $viewcap or !$legacyok) {        $result->status  = REPORT_SECURITY_CRITICAL;        $result->info    = get_string('check_defaultuserrole_error', 'report_security', format_string($default_role->name));    } else {        $result->status  = REPORT_SECURITY_OK;        $result->info    = get_string('check_defaultuserrole_ok', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_defaultuserrole_details', 'report_security');    }    return $result;}/** * Verifies sanity of guest role * @param bool $detailed * @return object result */function report_security_check_guestrole($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_guestrole';    $result->name    = get_string('check_guestrole_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=userpolicies\">".get_string('userpolicies', 'admin').'</a>';;    if (!$guest_role = get_record('role', 'id', $CFG->guestroleid)) {        $result->status  = REPORT_SECURITY_WARNING;        $result->info    = get_string('check_guestrole_notset', 'report_security');        $result->details = $result->info;        return $result;    }    // first test if do anything enabled - that would be really crazy!    $sql = "SELECT COUNT(DISTINCT rc.contextid)              FROM {$CFG->prefix}role_capabilities rc             WHERE rc.capability = 'moodle/site:doanything'                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $guest_role->id";    $anythingcount = count_records_sql($sql);    // risky caps - usually very dangerous    $sql = "SELECT COUNT(DISTINCT rc.contextid)              FROM {$CFG->prefix}role_capabilities rc              JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability             WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG | RISK_DATALOSS))." <> 0                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $guest_role->id";    $riskycount = count_records_sql($sql);    // it may have either no or 'guest' legacy type - nothing else, or else it would break during upgrades badly    $legacyok = false;    $sql = "SELECT rc.capability, 1              FROM {$CFG->prefix}role_capabilities rc             WHERE rc.capability LIKE 'moodle/legacy:%'                   AND rc.permission = ".CAP_ALLOW."                   AND rc.roleid = $guest_role->id";    $legacycaps = get_records_sql($sql);    if (!$legacycaps) {        $legacyok = true;    } else if (count($legacycaps) == 1 and isset($legacycaps['moodle/legacy:guest'])) {        $legacyok = true;    }    if ($anythingcount or $riskycount or !$legacyok) {        $result->status  = REPORT_SECURITY_CRITICAL;        $result->info    = get_string('check_guestrole_error', 'report_security', format_string($guest_role->name));    } else {        $result->status  = REPORT_SECURITY_OK;        $result->info    = get_string('check_guestrole_ok', 'report_security');    }    if ($detailed) {        $result->details = get_string('check_guestrole_details', 'report_security');    }    return $result;}/** * Verifies sanity of frontpage role * @param bool $detailed * @return object result */function report_security_check_frontpagerole($detailed=false) {    global $CFG;    $result = new object();    $result->issue   = 'report_security_check_frontpagerole';    $result->name    = get_string('check_frontpagerole_name', 'report_security');    $result->info    = null;    $result->details = null;    $result->status  = null;    $result->link    = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=frontpagesettings\">".get_string('frontpagesettings','admin').'</a>';;    if (!$frontpage_role = get_record('role', 'id', $CFG->defaultfrontpageroleid)) {        $result->status  = REPORT_SECURITY_INFO;        $result->info    = get_string('check_frontpagerole_notset', 'report_security');        $result->details = get_string('check_frontpagerole_details', 'report_security');        return $result;    }    // first test if do anything enabled - that would be really crazy!    $sql = "SELECT COUNT(DISTINCT rc.contextid)              FROM {$CFG->prefix}role_capabilities rc             WHERE rc.capability = 'moodle/site:doanything'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -