gpt4 book ai didi

php - 浏览器如何知道在请求时向服务器发送哪些 cookie?

转载 作者:可可西里 更新时间:2023-11-01 14:05:01 26 4
gpt4 key购买 nike

我知道 cookie 是如何工作的,刚开始研究为什么 Codeigniter 不在 SESSION 中存储生成的 csrf token ,它只是存储在 cookie 中。出于安全考虑,我开始考虑 php setcookie() 函数参数,例如路径和域。我问自己是否有可能从另一个域,从某个“www.evilsite.com”设置“evil_cookie”,路径=“/”和域=“www.goodsite.com”?还有一个问题是,在对'www.goodsite.com'进行请求时,'evil_cookie'会被发送到'www.goodsite.com'吗?

所以,我做了一个测试。我创建了“set_cookie.php”文件并将其上传到某个“www.evilsite.com”:

setcookie('evil_cookie', 'gotcha', time() + 60 * 30, '/', 'www.goodsite.com');

我使用 Firefox 和 Firebug + Cookie 插件来查看发送和接收的 cookie。因此,在向“www.evilsite.com/set_cookie.php”发出请求后,我确实收到了“evil_cookie”。但是,cookie 没有保存(至少在 firebug cookie 插件面板中查看时没有这样的 cookie)。再次请求“www.evilsite.com/set_cookie.php”时也没有发送。刚收到还没有保存。

从 Firefox 浏览器的 Angular 来看,只为当前域保存 cookie 是合乎逻辑且安全的。恕我直言,那些设置 cookie() 参数(例如路径和域)主要用于管理当前域及其子域的 cookie,但不用于外部域。我有点沮丧,我无法在 php.net 上找到相关信息,所以我不确定它是与浏览器相关的行为以及它如何处理“第 3 方 cookie”的具体情况,还是更像是一个标准?所有浏览器的行为都一样吗?如果此类声明有任何可靠可靠的来源,请分享。

这也与 cookie 的另一种用途相关 - 存储 session 数据(不使用 PHP native session ,例如 Codeigniter 就是这样做的)。因此,如果所有浏览器都不允许使用当前域以外的安全 cookie,那么没关系。但是,它不能防止 CSRF,因为“www.evilsite.com”可能包含恶意 javascript 代码,当用户执行并从“www.evilsite.com”获取请求时,这些代码将直接在客户端上创建“evil_cookie”。

最佳答案

Cookie 受 same origin policy 约束: 站点只能为自己的域写入和读取 cookie。

关于php - 浏览器如何知道在请求时向服务器发送哪些 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com