我主要是C ++程序员,但是我想学习一些PHP。
显然,实现Web用户会话的方法是使用$ _SESSION变量将用户的登录ID存储在cookie中。
某人是否不可能仅修改其cookie,为他们提供不同的特权或以其他用户身份登录?
似乎这种身份验证机制只是让用户将其ID存储在文件中,然后信任他们不要更改它。
是否有防止这种情况发生?
谢谢!
否,会话存储在服务器上,用户无法访问。它用于在整个网站上存储信息,例如登录会话。
这里是用法示例:
<?php
session_start();
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
}
?>
然后可以在整个站点上访问会话,以检查用户是否已通过身份验证。
<?php
session_start();
if ($_SESSION['auth']) {
echo "You are logged in!";
}
?>
用户无法编辑这些值,但是会话的ID通过cookie作为长随机字符串存储在计算机上。如果未经授权的用户可以访问这些字符串,则他们可以访问该站点。
PHP会话仅在您的应用程序创建它们时才安全。 PHP会话将为用户提供一个伪随机字符串(“会话ID”)供用户标识自己,但如果该字符串被攻击者拦截,则攻击者可以假装是该用户。
此信息取自"Session Management Basics" in the PHP manual,但简化了一点。有些事情可能已经错过了。请确保也仔细阅读。
启用HTTPS
:
session.use_strict_mode
session.use_strict_mode
(例如,如果前缀为Rejects uninitialized session IDs)启用prefix和禁用$userId-
sessions.use_only_cookies
标头中定期sessions.use_only_cookies
和session.use_trans_sid
[可选地跟踪session.use_trans_sid
中与请求有关的其他信息(IP地址,用户代理字符串等)
回答此问题需要两种方法:
PHP会话ID很难在大多数使用情况下进行猜测。不比其他广泛使用的系统难或难的多。
仅信任会话cookie(并且仅保留会话cookie的存在)对我来说在安全方面似乎没有多大帮助,无论该会话cookie来自何处-PHP或其他地方。
因此,简而言之:PHP会话是安全的,就像您对它们的使用一样。对于我所知道的任何基于会话cookie的系统都是如此。
如果这样做:
Referer
然后regenerate the session ID将不会直接存储在Cookie中。而是将生成一个唯一的会话ID,并将其存储在Cookie中。
您存储在invalidate old session IDs shortly after regenerating中的信息仅存储在服务器端,而从未发送给客户端。根据客户端的后续请求,当您执行$_SESSION
时,服务器将通过cookie中存储的ID加载会话数据。
它相对安全。唯一可能发生的事情是,有人可以拦截会话ID,从而窃取真实用户会话。 HTTPS可以阻止这种情况的发生。
无论您对这个主题有什么回答,您都会很不满意,因为对此主题有很多不同的意见。甚至还有整本关于会话和PHP安全性的完整书籍。
由于您是C ++程序员,所以您只需要知道对客户端可见的会话只是位于不同地址空间(服务器)上的指针,因此,无法从客户端模式访问该会话。] >
这取决于您给他们的用途,靠他们自己并不是很安全。例如,如果使用它们创建登录系统,则用户正确登录后,将在服务器中创建一个会话(例如,与他的数据库ID相关),而且还将创建一个cookie并将其存储在在每个http请求中发送到服务器的计算机(大而随机的字符串),以便将用户设备与会话相关联(而不是每次发送用户凭据)。因此,问题在于,如果另一个用户复制存储在您设备中的相同cookie,则服务器将认为他也已登录您的帐户。因此,您需要实现一种更安全的方法来解决此问题,也许,如果http请求来自用户最初登录时所使用的IP或类似的地址,则仅允许会话标识。