我在php手册中读到了一篇关于会话漏洞的文章。我了解到我需要将会话绑定到用户SSL证书,并在每个页面上验证。我不太清楚这意味着什么。
我的网站在每个页面都有SSL,没有任何交换机,用户可以在没有https的情况下访问它。
我是否需要在我的代码中采取措施来保护我的会话?
答案 0 :(得分:0)
我建议将会话cookie仅限制为HTTPS页面,即使您没有切换到非安全页面也是如此。这可以在使用session_set_cookie_params()调用session_start()函数之前完成,将参数$secure
设置为true。我没有听说需要验证cookie,cookie应该加密转移。
session_set_cookie_params(0, '/', '', true, true);
session_start();
要防止会话固定,您应该仅使用cookie而不是URL来传输会话ID。请参阅session.use_only_cookies
设置。要进入安全站点,您可以在登录后重新生成会话ID:
的login.php:
session_set_cookie_params(0, '/', '', true, true);
session_start();
session_regenerate_id(true);
这将生成一个具有不同会话ID的新cookie,但会保留会话的内容。
答案 1 :(得分:0)
如果您正在谈论客户端证书身份验证(客户端提供证书以向服务器进行身份验证),您可能使用服务器的身份验证层为您提供ID。假设Apache Httpd,可以使用SSLOptions +FakeBasicAuth
来完成。从PHP的角度来看,在此之后使用HTTP Basic身份验证并没有太大的不同(您可以将PHP会话绑定到这种身份验证形式)。
如果您不是在讨论客户端证书,而是在SSL / TLS会话ID中,则SSL / TLS会话的概念与PHP会话完全不同。 SSL / TLS会话可能在PHP会话期间合法地更改,原因有很多(包括连接丢失,超时,并行连接以同时下载页面上的多个项目,......)。这种更改的效果对HTTP层完全透明。两种会话之间没有链接,使用SSL / TLS会话ID作为PHP会话ID的基础比其他任何事情都更容易造成麻烦。