shell bypass 403
<?php
/**
* @package Joomla.Plugin
* @subpackage System.logout
*
* @copyright (C) 2010 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Plugin\System\Logout\Extension;
use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Application\CMSApplicationInterface;
use Joomla\CMS\Event\User\LogoutEvent;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Event\SubscriberInterface;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Plugin class for logout redirect handling.
*
* @since 1.6
*/
final class Logout extends CMSPlugin implements SubscriberInterface
{
/**
* @param array $config An optional associative array of configuration settings.
* @param CMSApplicationInterface $app The object to observe -- event dispatcher.
*
* @since 1.6
*/
public function __construct(array $config, CMSApplicationInterface $app)
{
parent::__construct($config);
$this->setApplication($app);
// If we are on admin don't process.
if (!$this->getApplication()->isClient('site')) {
return;
}
$hash = ApplicationHelper::getHash('PlgSystemLogout');
if ($this->getApplication()->getInput()->cookie->getString($hash)) {
// Destroy the cookie.
$this->getApplication()->getInput()->cookie->set(
$hash,
'',
[
'expires' => 1,
'path' => $this->getApplication()->get('cookie_path', '/'),
'domain' => $this->getApplication()->get('cookie_domain', ''),
]
);
}
}
/**
* Returns an array of events this subscriber will listen to.
*
* @return array
*
* @since 5.3.0
*/
public static function getSubscribedEvents(): array
{
return [
'onUserLogout' => 'onUserLogout',
];
}
/**
* Method to handle any logout logic and report back to the subject.
*
* @param LogoutEvent $event The event instance.
*
* @return void
*
* @since 1.6
*/
public function onUserLogout(LogoutEvent $event): void
{
if ($this->getApplication()->isClient('site')) {
// Create the cookie.
$this->getApplication()->getInput()->cookie->set(
ApplicationHelper::getHash('PlgSystemLogout'),
true,
[
'expires' => time() + 86400,
'path' => $this->getApplication()->get('cookie_path', '/'),
'domain' => $this->getApplication()->get('cookie_domain', ''),
'secure' => $this->getApplication()->isHttpsForced(),
'httponly' => true,
]
);
}
}
}