Skip to content

Commit f050929

Browse files
committed
MC-42497: Session Cookie (Authentication Related) Does Not Contain The "HTTPOnly" and "secure" Attribute
- Fix cookies created with $.mage.cookies are not "secure"
1 parent ed2ffad commit f050929

File tree

5 files changed

+61
-2
lines changed

5 files changed

+61
-2
lines changed

app/code/Magento/Cookie/Test/Mftf/Test/StorefrontVerifySecureCookieTest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,10 @@
4545
<actualResult type="variable">isCookieSecure</actualResult>
4646
<expectedResult type="string">true</expectedResult>
4747
</assertEquals>
48+
<executeJS function="return jQuery.mage.cookies.defaults.secure ? 'true' : 'false'" stepKey="isCookieSecure2"/>
49+
<assertEquals stepKey="assertCookieIsSecure2">
50+
<actualResult type="variable">isCookieSecure2</actualResult>
51+
<expectedResult type="string">true</expectedResult>
52+
</assertEquals>
4853
</test>
4954
</tests>

app/code/Magento/Cookie/Test/Mftf/Test/StorefrontVerifyUnsecureCookieTest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,10 @@
3232
<actualResult type="variable">isCookieSecure</actualResult>
3333
<expectedResult type="string">false</expectedResult>
3434
</assertEquals>
35+
<executeJS function="return jQuery.mage.cookies.defaults.secure ? 'true' : 'false'" stepKey="isCookieSecure2"/>
36+
<assertEquals stepKey="assertCookieIsSecure2">
37+
<actualResult type="variable">isCookieSecure2</actualResult>
38+
<expectedResult type="string">false</expectedResult>
39+
</assertEquals>
3540
</test>
3641
</tests>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Theme\ViewModel\Block;
9+
10+
use Magento\Framework\Session\Config\ConfigInterface;
11+
use Magento\Framework\View\Element\Block\ArgumentInterface;
12+
13+
/**
14+
* Provide cookie configuration
15+
*/
16+
class SessionConfig implements ArgumentInterface
17+
{
18+
/**
19+
* Session config
20+
*
21+
* @var ConfigInterface
22+
*/
23+
private $sessionConfig;
24+
25+
/**
26+
* Constructor
27+
*
28+
* @param ConfigInterface $sessionConfig
29+
*/
30+
public function __construct(
31+
ConfigInterface $sessionConfig
32+
) {
33+
$this->sessionConfig = $sessionConfig;
34+
}
35+
/**
36+
* Get session.cookie_secure
37+
*
38+
* @return bool
39+
* @SuppressWarnings(PHPMD.BooleanGetMethodName)
40+
*/
41+
public function getCookieSecure(): bool
42+
{
43+
return $this->sessionConfig->getCookieSecure();
44+
}
45+
}

app/code/Magento/Theme/view/frontend/layout/default.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
<block name="require.js" class="Magento\Framework\View\Element\Template" template="Magento_Theme::page/js/require_js.phtml" />
1313
<referenceContainer name="after.body.start">
1414
<block class="Magento\RequireJs\Block\Html\Head\Config" name="requirejs-config"/>
15-
<block class="Magento\Framework\View\Element\Js\Cookie" name="js_cookies" template="Magento_Theme::js/cookie.phtml"/>
15+
<block class="Magento\Framework\View\Element\Js\Cookie" name="js_cookies" template="Magento_Theme::js/cookie.phtml">
16+
<arguments>
17+
<argument name="session_config" xsi:type="object">Magento\Theme\ViewModel\Block\SessionConfig</argument>
18+
</arguments>
19+
</block>
1620
<block class="Magento\Theme\Block\Html\Notices" name="global_notices" template="Magento_Theme::html/notices.phtml"/>
1721
</referenceContainer>
1822
<referenceBlock name="top.links">

app/code/Magento/Theme/view/frontend/templates/js/cookie.phtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"expires": null,
1919
"path": "<?= $block->escapeJs($block->getPath()) ?>",
2020
"domain": "<?= $block->escapeJs($block->getDomain()) ?>",
21-
"secure": false,
21+
"secure": <?= $block->getSessionConfig()->getCookieSecure() ? 'true' : 'false'; ?>,
2222
"lifetime": "<?= $block->escapeJs($block->getLifetime()) ?>"
2323
}
2424
}

0 commit comments

Comments
 (0)