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:
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace MRBS\Session;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Language;
|
||||
use MRBS\Joomla\JFactory;
|
||||
use MRBS\User;
|
||||
use function MRBS\auth;
|
||||
|
||||
require_once MRBS_ROOT . '/auth/cms/joomla.inc';
|
||||
|
||||
|
||||
class SessionJoomla extends SessionWithLogin
|
||||
{
|
||||
|
||||
private const NAMESPACE = 'MRBS';
|
||||
|
||||
private $app;
|
||||
private $session;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->checkTypeMatchesSession();
|
||||
|
||||
if (!defined('JVERSION'))
|
||||
{
|
||||
throw new \Exception("Joomla! version not known");
|
||||
}
|
||||
|
||||
if (version_compare(JVERSION, '4.0', '<'))
|
||||
{
|
||||
$this->app = JFactory::getApplication('site');
|
||||
$this->app->initialise();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Thanks to Alex Chartier and Emmanuel Ingelaere.
|
||||
// See https://groups.google.com/g/joomla-dev-general/c/55J2s9hhMxA
|
||||
|
||||
// Boot the DI container
|
||||
$container = Factory::getContainer();
|
||||
|
||||
// Alias the session service keys to the web session service as that is the primary session backend for this application.
|
||||
// In addition to aliasing "common" service keys, we also create aliases for the PHP classes to ensure autowiring objects
|
||||
// is supported. This includes aliases for aliased class names, and the keys for aliased class names should be considered
|
||||
// deprecated to be removed when the class name alias is removed as well.
|
||||
$container->alias('session.web', 'session.web.site')
|
||||
->alias('session', 'session.web.site')
|
||||
->alias('JSession', 'session.web.site')
|
||||
->alias(\Joomla\CMS\Session\Session::class, 'session.web.site')
|
||||
->alias(\Joomla\Session\Session::class, 'session.web.site')
|
||||
->alias(\Joomla\Session\SessionInterface::class, 'session.web.site');
|
||||
|
||||
// Instantiate the application.
|
||||
$this->app = $container->get(\Joomla\CMS\Application\SiteApplication::class);
|
||||
// Build the namespace map and load the language (necessary from Joomla 4.3.0 onwards - see
|
||||
// https://groups.google.com/g/joomla-dev-general/c/55J2s9hhMxA/m/IpBrs3HZAgAJ?utm_medium=email&utm_source=footer&pli=1
|
||||
// and https://joomla.stackexchange.com/questions/32145/joomla-4-error-when-i-use-getarticleroute/32146#32146)
|
||||
if (version_compare(JVERSION, '4.3.0', '>='))
|
||||
{
|
||||
$this->app->createExtensionNamespaceMap();
|
||||
$lang = Language::getInstance('en'); // doesn't matter which language as we never use it
|
||||
$this->app->loadLanguage($lang);
|
||||
}
|
||||
|
||||
// Set the application as global app
|
||||
Factory::$application = $this->app;
|
||||
}
|
||||
|
||||
if (version_compare(JVERSION, '5.0', '<'))
|
||||
{
|
||||
$this->session = JFactory::getSession();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->session = Factory::getSession();
|
||||
}
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function init(int $lifetime) : void
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public function get(string $name)
|
||||
{
|
||||
return $this->session->get($name, null, self::NAMESPACE);
|
||||
}
|
||||
|
||||
|
||||
public function isset(string $name) : bool
|
||||
{
|
||||
return ($this->get($name) !== null);
|
||||
}
|
||||
|
||||
public function set(string $name, $value) : void
|
||||
{
|
||||
$this->session->set($name, $value, self::NAMESPACE);
|
||||
}
|
||||
|
||||
|
||||
public function unset(string $name) : void
|
||||
{
|
||||
$this->session->clear($name, self::NAMESPACE);
|
||||
}
|
||||
|
||||
|
||||
public function getCurrentUser() : ?User
|
||||
{
|
||||
return auth()->getCurrentUser() ?? parent::getCurrentUser();
|
||||
}
|
||||
|
||||
|
||||
protected function logonUser(string $username) : void
|
||||
{
|
||||
// Don't need to do anything: the user will have been logged on when the
|
||||
// username and password were validated.
|
||||
}
|
||||
|
||||
|
||||
public function logoffUser() : void
|
||||
{
|
||||
$this->app->logout();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user