我最近开始密切关注PHP会话,以加强我网站的安全性。我遇到了session_set_cookie_params()
。我对第4个参数(boolean secure
)特别感兴趣。是否意味着站点必须运行安全http (https)协议才能将此参数设置为true?如果没有,PHP如何通过安全连接为只使用http协议的站点发送cookie ?
secure
标志是cookie规范的一部分。如果浏览器接收到设置了secure
标志的cookie,它将不会将此cookie发送回服务器,除非连接是HTTPS加密的。不管当前连接状态如何,PHP都将设置 cookie,它最终不会知道或关心HTTPS的存在;这取决于你是否也通过HTTPS设置 cookie。
您应该通过HTTPS独家发送认证cookie ,以避免中间人或其他不安全网络(例如共享未加密的星巴克Wifi)直接劫持会话。否则,从空中夺取秘密会话标识符是一种真实的可能性,因此任何人都可以冒充任何人。这意味着在用户登录的整个过程中,它应该通过HTTPS与你的服务器通信,因为cookie在整个过程中都在来回传递;仅在初始登录页面使用HTTPS是不够的。
默认情况下,所有请求(http和https)都发送cookie。
如果你将安全标志设置为true,浏览器将只对https请求发送它们。
始终为身份验证cookie设置安全标志是很重要的:即使您不发出http请求,其他人也可以强迫浏览器这样做,即使您回答301,也已经太晚了,它们已经以明文发送。
对于一个完整的https网站,您可以系统地将安全标志设置为true