在 web 开发中,应用安全一直是一大热门话题。其中一个非常重要的细节便是 HTTP Only Cookies,其用于限制 cookie 的访问权限,在一定程度上可以防止攻击者窃取用户的身份验证信息。然而,许多开发者在将 HTTP Only Cookies 应用于其 PHP 应用程序时,发现它似乎无效,本文将深入探讨这个问题。
首先,HTTP Only Cookies 究竟能做什么?在一个正常的 cookie 中,JavaScript 可以访问这个 cookie 的值。然后,攻击者就可以利用这个 cookie 拿到一些关键信息,比如说 cookie 中所存储的用户 ID,然后就可以通过这个用户 ID 发起一些欺诈性操作。而当 cookie 被设置为 HTTP Only 时,JavaScript 是无法访问它的,攻击者就失去了这种攻击方式。
那么,为什么在 PHP 中设置 HTTP Only Cookies 时会出现问题呢?看下面这段示例代码:在上面的代码中,最后两个参数分别是 `true`、`true`,分别用于标识 cookie 应该在 SSL 连接下生效,并且将 cookie 标记为 HTTP Only。然而,在从客户端(例如 Chrome 或 FireFox)获取到这些 cookie 的值进行查看时,发现 `HTTPOnly` 标识似乎没有生效。这是为什么呢?
由于 PHP 的版本在 7.3 之前,`setcookie()` 函数无法识别 HTTP Only 标识,因此它会将这个标识作为 cookie 值的一部分进行缓存,并没有将它设置为 HTTP Only。
有一种方法可以解决这个问题,可以使用 `session_set_cookie_params()` 函数去设定这些属性,而不是通过 `setcookie()` 去设置。用下面这段代码实现:这里我们使用 `session_set_cookie_params()` 方法,将参数传递给 session 配置信息,使用这种方式可以正常设置 HTTP Only 和 Secure 标识。
通过上面的操作,我们在 PHP 中即可正常地应用 HTTP Only 和 Secure 标识,以提高应用的安全性。
虽然设置 HTTP Only Cookies 不能完全避免攻击,但它能够起到一定的保护作用。在进行 web 应用开发时,如果你还没有使用 HTTP Only Cookies 来加强应用的安全性,那么请在下一次更新中加入这种标识。