Skip to content

Commit

Permalink
bug #14 [Security] Clickjacking vulnerability fixed (ernestWarwas)
Browse files Browse the repository at this point in the history
This PR was merged into the 1.9 branch.

Discussion
----------

| Q               | A
| --------------- | -----
| Branch?         | 1.9
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| License         | MIT

There was a possibility to load a page within an iframe which is enabling to the possibility to perform a clickjacking attack.

<!--
 - Bug fixes must be submitted against the 1.10 or 1.11 branch(the lowest possible)
 - Features and deprecations must be submitted against the master branch
 - Make sure that the correct base branch is set

 To be sure you are not breaking any Backward Compatibilities, check the documentation:
 https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->


Commits
-------

0886078 listener added to finish response with X-Frame-Options sameorigin header
c236431 suggested review changes
  • Loading branch information
lchrusciel authored Mar 7, 2022
2 parents 9460236 + c236431 commit 67de9e8
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Sylius\Bundle\CoreBundle\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

final class XFrameOptionsSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => 'onKernelResponse',
];
}

public function onKernelResponse(ResponseEvent $event): void
{
if (!$this->isMainRequest($event)) {
return;
}

$response = $event->getResponse();

$response->headers->set('X-Frame-Options', 'sameorigin');
}

private function isMainRequest(ResponseEvent $event): bool
{
if (\method_exists($event, 'isMainRequest')) {
return $event->isMainRequest();
}

return $event->isMasterRequest();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@
<argument type="service" id="Sylius\Bundle\CoreBundle\EventListener\LocaleAwareListener.inner" />
</service>

<service id="Sylius\Bundle\CoreBundle\EventListener\XFrameOptionsSubscriber">
<tag name="kernel.event_subscriber" />
</service>

<service id="sylius.listener.taxon_deletion" class="Sylius\Bundle\CoreBundle\EventListener\TaxonDeletionListener">
<argument type="service" id="session" />
<argument type="service" id="sylius.repository.channel" />
Expand Down
29 changes: 29 additions & 0 deletions tests/Controller/XFrameOptionsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Sylius\Tests\Controller;

use ApiTestCase\JsonApiTestCase;

final class XFrameOptionsTest extends JsonApiTestCase
{
/** @test */
public function it_sets_frame_options_header(): void
{
$this->client->request('GET', '/');

$response = $this->client->getResponse();

$this->assertSame('sameorigin', $response->headers->get('X-Frame-Options'));
}
}

0 comments on commit 67de9e8

Please sign in to comment.