mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-21 07:56:16 -04:00
cookies: Use SameSite=None
if in an iframe from another site
This commit is contained in:
parent
bf53162cdd
commit
2db4b04af3
5 changed files with 71 additions and 4 deletions
|
@ -528,13 +528,28 @@ padutils.setupGlobalExceptionHandler = setupGlobalExceptionHandler;
|
|||
|
||||
padutils.binarySearch = require('./ace2_common').binarySearch;
|
||||
|
||||
// https://stackoverflow.com/a/42660748
|
||||
function inThirdPartyIframe() {
|
||||
try {
|
||||
return (!window.top.location.hostname);
|
||||
} catch (e) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// This file is included from Node so that it can reuse randomString, but Node doesn't have a global
|
||||
// window object.
|
||||
if (typeof window !== 'undefined') {
|
||||
exports.Cookies = require('js-cookie/src/js.cookie');
|
||||
// Use `SameSite=Lax`, unless Etherpad is embedded in an iframe from another site in which case
|
||||
// use `SameSite=None`. For iframes from another site, only `None` has a chance of working
|
||||
// because the cookies are third-party (not same-site). Many browsers/users block third-party
|
||||
// cookies, but maybe blocked is better than definitely blocked (which would happen with `Lax`
|
||||
// or `Strict`). Note: `None` will not work unless secure is true.
|
||||
//
|
||||
// `Strict` is not used because it has few security benefits but significant usability drawbacks
|
||||
// vs. `Lax`. See https://stackoverflow.com/q/41841880 for discussion.
|
||||
exports.Cookies.defaults.sameSite = 'Lax';
|
||||
exports.Cookies.defaults.sameSite = inThirdPartyIframe() ? 'None' : 'Lax';
|
||||
exports.Cookies.defaults.secure = window.location.protocol === 'https:';
|
||||
}
|
||||
exports.randomString = randomString;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue