Cookie 并非安全措施

Cookie 并非安全措施

我是一名 PHP 程序员初学者,想继续学习引起我注意的一切,我会分析它直到我理解它。我最近在网上看到了大约 2 个页面,一个商店和一个类似 PayPal 的支付处理页面,我看到了一些奇怪的事情,当我第一次访问该网页时(第一次,我的意思是在没有 cookie、缓存等的未加工模式下),页面会自动进行以下重定向:

https://example.com/ -> https://example.com/?secure=1

一旦重定向我(首次访问时),它会创建一个值为 md5 类型的 cookie,最有趣的是,除非我的 IP 地址发生变化,否则该值不会改变,这两个网页也是如此。此外,如果我手动从搜索引擎中删除 cookie,它会再次重定向我,就像第一次进入一样。

我已经尝试在 Google 上搜索了好几天,但还是搞不懂。有人能告诉我这是什么吗?我可以使用 cookie 和重定向将哪些类型的安全性集成到网站中?另外,据说有时 URL 会更改为:

/?secure=2

它可能是一个像 symfony 或 laravel 这样的框架功能吗?

答案1

Cookie 并非安全措施

根据您的描述,您对安全性和网络内部工作原理都很陌生,因此我将尝试尽可能以初学者友好的方式解释这两个概念。

首先,安全并不是单一的事物你只能增加。安全只能作为对特定威胁的抵抗而存在。与汽车相比:你不能简单地“让汽车更安全”,但你可以让汽车更安全以抵御特定类型的威胁,例如正面碰撞、侧面碰撞等。

什么是 Cookie 以及其用途是什么?

由于立法者最近强制网站告知用户他们的网站使用 cookie,大多数网民都知道 cookie 的存在,但尚不清楚它们是什么以及它们的作用。

简而言之,每个 cookie 至少包含两个内容:名称和值。网站可以指示浏览器设置 cookie,浏览器将保存该 cookie。然后,在浏览器向该网站发出每个进一步的请求时,浏览器都会将所有 cookie 发送到服务器。它看起来像这样:

浏览器:您好,StackExchange。我想访问“security.stackexchange.com”
服务器:你好,浏览器。这里是“security.stackexchange.com”

浏览器:您好,StackExchange。我现在想登录。我的名字是 MechMK1,我的密码是“f0CGlLJZ”
服务器:您好,浏览器。您现在已登录。请将 cookie“session”设置为“1234 5678 ABCD”

浏览器:您好,StackExchange。我现在想将显示语言更改为德语。另外,我的“会话”cookie 是“1234 5678 ABCD”
服务器:你好,浏览器。我认出你是 MechMK1。你的显示语言现在是德语。请将 cookie“lang”设置为“DE”

浏览器:您好,StackExchange。我想问一个新问题。另外,我的“会话”cookie 是“1234 5678 ABCD”,我的“语言”cookie 是“DE”
服务器:你好,浏览器。我知道你是 MechMK1,你的首选显示语言是德语。这是德语的新问题页面。

这到底有什么必要呢?服务器难道不能“记住”我是谁吗?事实证明,不能。网络基于 HTTP,而 HTTP 是一种所谓的“无状态”协议。它无法记住任何东西,网络服务器会将每个请求都视为您第一次请求。添加 Cookie 是为了让浏览器可以反复向服务器提供所需的所有信息。

Cookie 与安全有何关系?

Cookie 通常是攻击者的目标。如上例所示,Cookie 可用于告诉网站您是谁,因此能够窃取此 Cookie 的攻击者将能够冒充您。如果攻击者拥有您的会话 Cookie,Web 服务器实际上无法区分攻击者和您。

因此,已经创建了许多机制来使 cookie 更安全,例如 HTTPOnly 标志或 cookie 中的 Secure 标志。我不会详细解释这些,因为这不是问题的范围,但你可以阅读它们的作用。

Cookie 还可用于防范特定类型的攻击。我知道,我之前说过 Cookie 不是一种安全措施,而我之前的说法似乎与此相矛盾。我的意思是“Cookie 通常不是一种安全措施。但是,您可以使用 Cookie 来防范特定类型的攻击”。具体来说,跨站请求伪造所谓的“双重提交 Cookie 模式”可以减轻攻击,这需要另一个答案来整体解释。

PayPal 用 Cookie 做什么?

在您的问题中,您提到了 PayPal 表现出的一种特定行为。问题是,我无法告诉您 PayPal 如何处理他们的 Cookie。本质上,您将 Cookie 发送给 PayPal,然后他们的应用服务器决定任何根据这些 cookie。如果您发送了一个名为“giveMeAllTheMoney”的 cookie,其值为“prettyPlease”,那么 PayPal 上的所有资金都将转给您 - 不太可能,但除了 PayPal 之外没有人能够判断是否确实如此。

我可以说的是,没有什么万灵药能像设置?secure=2为查询参数或其他 cookie 那样神奇地让您的网站免受所有攻击。

相关内容