cookie 的使用及其安全性

The use of cookies and their security

背景

你们可能都知道:Cookie 是存储在用户计算机上的小文件。它们旨在保存特定于特定客户端和网站的适量数据,并且可以通过 Web 服务器或客户端计算机访问。

这些知识让我对 cookie 的安全性感到疑惑,并给了我几个问题

我的问题

因为我是一名 PHP 开发人员,所以以上问题都关注 PHP。

Are Cookies encrypted by default

没有

If they are not, how would I go about encrypting my cookies

如果你想对用户隐藏信息。首先不要把它放在 cookie 中。将其保存在服务器上。 (并放置一个令牌,您可以使用该令牌在 cookie 中检索正确的信息)。

如果你想对第三方攻击者隐藏信息。使用 SSL。

Above points aside, are cookies encrypted when I am using SSL

当您使用 SSL 时,服务器和客户端之间(双向)传输的所有内容都会被加密。

  • Are Cookies encrypted by default

不,无论您为它们设置什么值,cookie 都会以明文形式发送。

  • If they are not, how would I go about encrypting my cookies

加密 key/value 对或加密它们以在浏览器和用户之间安全传递?

对于后者,使用 TLS(与 SSL 相同)。对于前者,您应该考虑为什么要加密它们 - 如果您自己加密它们,通常不需要将它们发送到浏览器。

  • Above points aside, are cookies encrypted when I am using SSL

是的,它们在传输过程中被加密。但是,除非您设置 Secure Flag,否则如果用户访问您网站的 http:// 版本,cookie 将以未加密的方式传输。

例如如果您在 https://www.example.com 上设置 cookie,然后用户浏览,或跟随 link 到 http://www.example.com,则 cookie 将以明文形式发送。攻击者还可以通过 MITM 连接到另一个站点然后将 <img src="http://www.example.com/foo.bar" /> 注入页面导致浏览器连接到您的站点并发送所有 cookie 来强制泄露 cookie。

这就是为什么如果您希望 cookie 仅为 HTTPS,建议始终设置安全标志。