我正在使用 Nginx 服务器来托管 PHP Web 应用程序,并尝试使用一些安全标头来升级其安全性,我已经在暂存环境中对其进行了测试并且运行良好,因此我决定在生产中使用相同的配置,一周后,我们遇到了一些问题,许多用户报告在应用程序上执行任何请求时会话被关闭等问题。
所以我检查了日志和其他配置,但都不起作用。然后,我删除了,add_header Set-Cookie "Path=/; HttpOnly; Secure"
应用程序又开始工作了。
以下是 Staging 上的当前配置,除上述指令外,生产上的配置相同
#Secure flag for Cookies
add_header Set-Cookie "Path=/; HttpOnly; Secure";
#XSS Protection
add_header X-XSS-Protection "1; mode=block";
#Clickjacking Protection
add_header X-Frame-Options "SAMEORIGIN";
#Check MIME type for files
add_header X-Content-Type-Options nosniff;
为什么当我使用 nginx 时它会关闭用户会话?
答案1
在Set-Cookie
标头中,该HttpOnly
标志指示浏览器阻止客户端脚本访问 Cookie。这是一项安全功能,可帮助防止 XSS 攻击。但是,由于这是一项客户端功能,因此它不应该是您遇到的问题的根源。
当您使用该HttpOnly
设置时,您的应用程序会话可能会因各种原因而关闭。一种可能是服务器未能Set-Cookie
正确设置标头中的安全标志。安全设置指示浏览器仅通过安全的 HTTPS 连接发送 cookie,这对于保护敏感数据至关重要。
还有一种可能是Set-Cookie
Header中的Path值设置错误,Path值定义了Cookie生效的服务器路径,如果错误指定了该路径,则Cookie可能无法在后续请求中传输,从而导致会话丢失。
会话结束也可能是由于应用程序代码中的错误或配置错误。您应该检查应用程序代码,以确定是否存在可能导致此问题的缺陷。
总之,该HttpOnly
标志不应该对您的会话造成任何问题。检查Set-Cookie
标头中的“安全和路径”设置是否正确设置,然后分析您的应用程序代码,查找可能导致会话关闭的任何错误。