richardhj / contao-crossdomaincookies
Requires
- php: ^5.4 || ^7.0
- contao-community-alliance/composer-plugin: ^2.4
- contao-community-alliance/events-contao-bindings: ^3.2
- contao/core: ^3.1
- symfony/http-foundation: ^3.3
This package is auto-updated.
Last update: 2024-09-10 20:44:02 UTC
README
在不同域名的Contao安装之间进行跨页链接——并保持某些cookie存活。将能够处理多个域之间的成员身份验证。或者isotope购物车。
安装
通过composer
$ composer require richardhj/contao-crossdomaincookies
用法
- 确保在Contao安装中使用的所有域名都已设置在根页面的“dns”字段中。
- 用户必须点击一个链接来获取网站(他/她最初登录的)的cookie。请使用插入标记包括链接。
插入标记
确保将99
替换为其他页面的id或别名。
工作原理
页面A和页面B是同一Contao安装的一部分。
当从页面A链接到页面B时,链接看起来像https://page-b.local/?o=page-a.local&t=zyxitopjfsetbjjutwsdf
如你所见,两个get参数被添加到页面uri中
当在页面B上——并且存在get参数时——,将包含一个javascript。此脚本将在页面B上创建cookie。脚本将从https://page-a.local
加载,因此cookie是页面A上的cookie。
javascript看起来像
document.cookie = "FE_USER_AUTH=; expires=Sun, 10 Sep 2017 17:34:31 GMT; path=/"; document.cookie = "FE_AUTO_LOGIN=abcdefghijklmnopqr; expires=Mon, 11 Dec 2017 17:34:31 GMT; path=/";
这就是跨域cookie的魔法所在。
安全
关于安全和漏洞的一些话
此扩展自动从给定为get参数的网站加载一个javascript。get参数可以很容易地修改,这个扩展就是实践中XSS漏洞的一个很好的例子。因此,此扩展需要检查给定的get参数url是否属于Contao安装的一部分。因此,在从其他域包含javascript之前,它将验证其他域是否可在Contao安装的根页面的“dns”字段中找到。
为了处理跨域身份验证,此扩展为特定用户激活auto_login(“记住我”)。这意味着,用户将不会被关闭窗口注销,这是默认行为。这是因为Contao会将auth cookie与绑定到cookie的session_id进行比较,因此会在其他域上更改。这可能会对具有敏感数据的网站和使用忘记注销的用户造成问题。为了降低问题,auto_login cookie将在一段时间后过期。
许可
GNU Lesser General Public License (LGPL)。
请随时贡献。