当我读到“PHP Session vers Cookie”时,我经常发现cookie没有被保存,因为它们存储在浏览器的客户端。当然,黑客可以访问PHPSESSID cookie并获取session_id。
所以同时我对使用php.ini语句“session.use_cookies = 1”和“session.use_only_cookies = 1”运行PHP的重新安装有点困惑。
如果黑客获得此cookie,PHPSESSID whigh会自动包含session_id,该怎么办?
发表声明“session_regenerate_id();”会有所帮助吗?在“session_start()”之后?
即使这样,会话cookie也会写入客户端,并且可以被黑客读取。
我是否正确地说这会产生会话cookie的想法 - 即使浏览器将被关闭也会识别用户 - 没用?
这真令人困惑。
我是PHP和Sessions安全问题的初学者。也许我可以在这里找到一些帮助来理解这个概念。我已经阅读了很多帖子,但我还没有找到我的具体问题的答案。
答案 0 :(得分:1)
简短回答是$_SESSION
个变量无法访问客户端,例如$_SESSION['variable']
- >不存储在客户端上。可以访问用于将这些变量与客户端关联的$_SESSION
id,因为它存储为可以轻松操作的cookie。因此,例如,如果我创建了一个验证用户凭据的登录系统,那么通常的做法是使用此$_SESSION
id或会话变量($_SESSION['loginSuccess']
)作为此登录成功的标识符,以便它可以被允许访问“锁定”页面。客户端$_SESSION
Cookie仅在浏览器处于打开状态时处于活动状态,如果您关闭浏览器,则$_SESSION
Cookie将被强制过期。
巨大的安全风险是,如果某人能够使用“中间人”攻击(简称MitM)等技术获取对会话变量的访问权限。他们需要做的只是通过将其替换为经过身份验证的cookie来操作自己的会话ID cookie,然后刷新页面。要解决此问题,只需让您的网站从受信任的CA(证书颁发机构,例如GoDaddy)安装SSL证书,并强制您的Web服务器仅允许HTTPS连接。这意味着从服务器传输到客户端的所有数据(反之亦然)都是1对1加密的。
即使在您强制执行HTTPS之后,值得注意的是,MitM攻击仍然可能成功并访问您的加密数据。这通常由MitM软件代表客户端启动SSL确认来完成,之后,MitM向客户端提供不同的SSL证书(通常是自签名的)。通过这样做,MitM软件可以使用2x SSL证书查看来自客户端和服务器的所有加密流量。用户在浏览器中会收到错误,说明证书与使用的域不匹配或不受信任(因为是自签名的),但正如我们所知,一些最终用户无疑会接受这一点。 为了解决这个问题,大多数银行使用JS检查客户端证书的有效性,然后确认服务器端是否有效。我个人没有必要为了我的网站的安全性这么长,但我相信它不会在这成为最佳实践之前很久。