-
-
Notifications
You must be signed in to change notification settings - Fork 4.3k
cookie_domain config option for setting cookie on a wider domain #51657
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
cookie_domain config option for setting cookie on a wider domain #51657
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good otherwise
lib/base.php
Outdated
@@ -398,6 +398,9 @@ public static function initSession(): void { | |||
$cookie_path = OC::$WEBROOT ? : '/'; | |||
ini_set('session.cookie_path', $cookie_path); | |||
|
|||
// set the cookie domain to the Nextcloud domain | |||
ini_set('session.cookie_domain', self::$config->getValue('cookie_domain', '')); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
might be worth only doing this if the value is set to anything but ''
to prevent overwriting any value set by the admin in the php configuration
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed. (I amended and force-pushed the new commit : do you prefer individual fix commits for review before a final squash for merge ?)
0add860
to
56074a9
Compare
I also wondered if / how this option would be enforced for nextcloud apps. I don't know the codebase, so I can't tell if they will automatically pick this option for apps-defined cookies. |
Apps should generally not be doing their own cookie logic |
56074a9
to
0f78922
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use typed version of the getter when possble (not possible in base.php as it’s not the same config class in use)
@@ -59,7 +59,7 @@ public function __construct( | |||
[ | |||
'expires' => 0, | |||
'path' => $webRoot, | |||
'domain' => '', | |||
'domain' => $this->config->getSystemValue('cookie_domain', ''), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'domain' => $this->config->getSystemValue('cookie_domain', ''), | |
'domain' => $this->config->getSystemValueString('cookie_domain'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in last commit.
lib/private/User/Session.php
Outdated
@@ -968,14 +968,15 @@ public function setMagicInCookie($username, $token) { | |||
if ($webRoot === '') { | |||
$webRoot = '/'; | |||
} | |||
$domain = $this->config->getSystemValue('cookie_domain', ''); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$domain = $this->config->getSystemValue('cookie_domain', ''); | |
$domain = $this->config->getSystemValueString('cookie_domain'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
lib/private/User/Session.php
Outdated
@@ -1012,18 +1013,19 @@ public function setMagicInCookie($username, $token) { | |||
public function unsetMagicInCookie() { | |||
//TODO: DI for cookies and IRequest | |||
$secureCookie = OC::$server->getRequest()->getServerProtocol() === 'https'; | |||
$domain = $this->config->getSystemValue('cookie_domain', ''); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
$domain = $this->config->getSystemValue('cookie_domain', ''); | |
$domain = $this->config->getSystemValueString('cookie_domain'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
github is misbehaving or you forgot to push, but I do not see the update?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed : I forgot to push the changes. Now, it's fixed (at least, I see the fix in github, too).
6c904c5
to
f5a89f0
Compare
12c6c07
to
f5a89f0
Compare
@@ -59,7 +59,7 @@ public function __construct( | |||
[ | |||
'expires' => 0, | |||
'path' => $webRoot, | |||
'domain' => '', | |||
'domain' => $this->config->getSystemValueString('cookie_domain'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As you can see in psalm output, there is no config property in this class.
So you need to either inject it in the constructor, or directly pull it here:
'domain' => $this->config->getSystemValueString('cookie_domain'), | |
'domain' => \OCP\Server::get(\OCP\IConfig::class)->getSystemValueString('cookie_domain'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK! Included.
Signed-off-by: Samuel Bizien Filippi <[email protected]>
f5a89f0
to
2b03b8e
Compare
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
Summary
Adds a
cookie_domain
option to define to which domain(s) the cookies sent by Nextcloud are valid. By default, it is set to''
which is the safe option (i.e. the browser is instructed to send the cookie only for request to the exact same domain that issued it).But when your instance is accessible over 2 domains, for example 'mycloud.mydomain.example' and 'sub.mycloud.mydomain.example', setting
cookie_domain
to 'mycloud.mydomain.example' will make the cookie valid formycloud.mydomain.example
and any subdomain (but not formydomain.example
).Documentation : MDN / Cookies / Define where cookies are sent.
TODO
I've updated config.sample.php, but it's not clear where should this functionality should be documented.
Checklist