0

我正在使用 Fiddler 现场查看网站如何在其登录系统中使用 cookie。虽然我有一些 HTTP 知识,但我只是在学习 cookie 以及它们如何在站点中使用。

最初我假设在提交表单时我会看到没有发送任何 cookie,并且响应将包含一些 cookie 信息,然后浏览器会保存这些信息。

事实上,情况似乎正好相反。它是发送信息的请求,服务器什么也不返回。

在摆弄这个问题时,我注意到即使浏览器清除了 cookie,客户端似乎总是向服务器发送 RequestVerificationToken,即使只是在没有登录的情况下四处查看。

为什么会这样?

谢谢

4

2 回答 2

2

Cookie 由服务器使用Set-CookieHTTP 响应头设置,也可以通过 JavaScript 设置。

cookie 有一个路径。如果 cookie 的路径与正在请求的文档的路径匹配,则浏览器将在CookieHTTP 请求标头中包含所有此类 cookie。

您必须确保在设置或修改 cookie 时小心谨慎,以避免针对您的用户的 XSS 攻击。因此,在您的登录表单中包含一个隐藏且唯一的秘密可能很有用,并在设置任何 cookie 之前使用该秘密。或者,您可以简单地检查 HTTPReferer标头是否与您的站点匹配。否则,恶意站点可以复制您的表单字段,并在他们的站点上创建一个登录表单到您的站点,并执行 form.submit(),有效地注销您的用户,或通过毫无戒心的用户对您的站点执行暴力攻击碰巧正在访问恶意网站。

您提到的RequestVerificationToken与 HTTP Cookie 无关,这听起来像是一些用某些特定站点脚本语言编写的站点用来保护其 cookie 设置页面免受 XSS 攻击的实现细节。

于 2013-03-16T21:50:36.407 回答
0

当您点击网站上的页面时,通常响应(您登陆的页面)在 http 响应中包含来自服务器的指令以设置一些 cookie。

网站可能会使用这些来跟踪有关您的行为的信息或保存您未来或短期的偏好。

网站可能会在您第一次访问任何页面或访问特定页面时这样做。

然后,浏览器会将所有已随后续请求设置的 cookie 发送到该域。

想想看,HTTP 是无状态的。您登陆主页并单击将背景设置为蓝色。然后你去了一个画廊页面。下一个请求发送到您的服务器,但服务器不知道您的背景颜色偏好。

现在,如果请求包含一个 cookie,告诉服务器您的偏好,该网站将为您提供正确的偏好。

现在这是一种方式。另一种方式是会话。将 cookie 视为存储在客户端的信息。但是如果服务器需要在服务器端存储一些关于你的临时信息怎么办。可能过于敏感而无法在 cookie 中公开的信息,这些信息是本地的,很容易被拦截。

现在你会问,但 HTTP 是无状态的。正确的。但是服务器可以将有关您的信息保存在地图中,其是会话 ID。此会话 ID 在客户端设置为 cookie 或随参数中的每个请求重新发送。现在服务器只获取密钥但可以查找有关您的信息,例如您是否登录成功,您在系统中的角色等。

哇,这么多的文字,但我希望它有所帮助。如果没有,请随时询问更多。

于 2013-03-14T21:49:07.937 回答