只有http的cookie安全吗?


Is http-only cookie safe?

我正在从服务器设置仅http cookie来存储一些用户信息,以便我可以在后端验证用户。假设某个黑客从某人的浏览器中窃取了此cookie,然后转到我的网页并使用document.cookie ="cookie_name = cookie_value"添加相同的cookie(如果cookie不存在)。如果 cookie 存在,那么他可以使用 chrome 开发者工具删除现有的仅限 http 的 cookie,然后在他的浏览器上使用 document.cookie = "cookie_name = cookie_value" 添加它。

现在,当服务器收到来自黑客浏览器的调用时,它会获得黑客设置的cookie并对其进行验证。我怎样才能阻止这种情况?

Cookie 使您容易受到跨站点请求伪造及其亲属的攻击。 不仅仅是黑客窃取cookie,还有黑客借用已经有cookie的用户浏览器。 这就是为什么代币在今天更常见的部分原因。

如果您必须使用 Cookie,您可以采取各种措施来降低它们的不安全性 - 更新每个请求的 cookie,验证请求 IP 以发送 IP,配置您的网页不允许加载异地内容,强制重新登录以进行任何重大操作,以及其他用户验证手段。 它们都不是完美的。

很简单:你不能。 http-only的目的与验证不同。您假设黑客将使用浏览器是您遇到的第一个问题。我永远不会使用浏览器做这样的事情,因为浏览器会限制我。我会用我自己的工具伪造一个HTTP请求,并将一个带有http-only和安全的标头以及您希望我发送到您的服务器的任何内容。

如果您想验证您的 Cookie,您需要实施自己的解决方案,而不是依赖浏览器机制。例如,您可以将 cookie 绑定到某个 IP 范围,并在 cookie 密钥或 cookie 值的末尾添加某种令牌。

一般来说,按照@bryanx说的去做。请勿使用 COOKIE 来存储数据。它们适用于会话令牌等。

不要使用 cookie。

Cookie 对于在会话之间保留信息是必需的,但只要您在客户端上留下信息,您就会面临您所描述的潜在问题。如果您只需要在用户会话期间维护的信息,您可能需要考虑使用 $_SESSION 而不是 cookie。

如果必须使用 Cookie,则可能需要考虑构建逻辑,如果 Cookie 与以前经过身份验证的设备不匹配,则再次质询用户的凭据。有很多方法可以解决这个问题,只要发挥创意即可。