MRBS 1.12.2 等保2.0二级整改完整提交

包含:登录失败锁定、90天密码有效期、30分钟会话超时、
强制改密、登录审计日志、屏幕水印、企业背景图、
备案信息固定底部、favicon、JS空集合保护、
会话过期体验优化(403 JSON)、display_errors 关闭、
固定 key 根治 Integrity check failed 等全部改动

注意:config.inc.php/.htaccess/.user.ini 含敏感信息,
通过 .gitignore 排除,勿推送到公开仓库。
This commit is contained in:
人事系统开发
2026-09-09 16:55:02 +08:00
commit 1ba6efd8ed
2151 changed files with 528780 additions and 0 deletions
@@ -0,0 +1,58 @@
<?php
declare(strict_types=1);
namespace MRBS\Intl;
// A class which is just a wrapper for the standard PHP class if it's available; otherwise it
// provides a basic emulation of PHP's IntlDatePatternGenerator class.
use MRBS\Exception;
use MRBS\Language;
// We need to check that the 'intl' extension is loaded because earlier versions of
// MRBS had the IntlDatePatternGenerator emulation class at the top level in lib. If users
// have upgraded by just overwriting files without deleting that file, then it will
// be picked up by the class_exists() test and used instead of the more up-to-date
// emulation below.
if (class_exists('\IntlDatePatternGenerator') && extension_loaded('intl'))
{
class IntlDatePatternGenerator extends \IntlDatePatternGenerator
{
}
}
else
{
class IntlDatePatternGenerator
{
private const DEFAULT_LOCALE = 'en';
private $locale;
// $locale The locale. If null is passed, uses the ini setting intl.default_locale.
public function __construct(?string $locale = null)
{
if (!isset($locale)) {
$locale = ini_get('intl.default_locale');
if (($locale === false) || ($locale === '')) {
throw new Exception("Could not get locale");
}
}
$this->locale = $locale;
}
public function getBestPattern(string $skeleton)
{
$file = MRBS_ROOT . "/intl/skeletons/$skeleton.ini";
if (is_readable($file)) {
$patterns = parse_ini_file($file);
if (!empty($patterns)) {
return $patterns[Language::convertToBcp47($this->locale)] ?? $patterns[self::DEFAULT_LOCALE] ?? false;
}
}
return false;
}
}
}