我试图理解php中的会话。 据我了解,在基本登录系统中,会话的工作方式如下: 在页面上 exampledomain.com/login.php:
if (password_verify($_POST['user_password'], $result->password_hash)) {
//write user data into PHP SESSION
$_SESSION['user_name'] = $_POST['user_name'];
}
然后在只有登录用户才能查看的页面上,我检查:
if (isset($_SESSION['user_name'])) {
//do something
}
现在我不明白的是,如果黑客在自己的服务器上(hackerdomain.com(做这样的事情,假设他知道一个用户名:
session_start();
$_SESSION['user_name'] = 'Test';
<form method="post" action="exampledomain.com/page-only-logged-in-users-can-view.php" name="loginform">
<input type="submit" name="login" value="Login" />
</form>
现在他用$_SESSION['user_name']设置了一个值,这样他就可以登录,即使需要密码。 我对这个会议的事情感到非常困惑。我阅读了 php 文档,但我仍然不明白。
会话最终是服务器发送到浏览器的cookie。这个饼干很特别,具有一些属性,例如:
- 名字。例如,在 php 中,默认情况下,PHPSESSID
- 价值。对于会话 ID,标识服务器上 cookie 的随机字符串(此 cookie 具有关联的数据,如用户名、电子邮件等( 域:
- 定义 cookie 的域范围,其中 cookie 将通过浏览器发送(例如:非值表示仅生成 cookie 的主域服务器,没有子域。默认情况下,域值包含子域( 路径
- :路径表示请求的 URL 中必须存在的 URL 路径才能发送 Cookie 标头 过期
- /最长期限:在特定时间使cookie过期(例如:2018-08-03T17:30:56.146Z(
- httpOnly:布尔值,如果为 true,则 javascript (document.cookie( 无法访问 cookie 以防止 XSS 攻击
- 安全:布尔值,如果必须在https下发送真正的cookie
- 同一站点:SameSite cookie 允许服务器要求不应将 cookie 与跨站点请求一起发送,这在一定程度上可以防止跨站点请求伪造攻击 (CSRF(。SameSite cookie 仍处于实验阶段,尚未被所有浏览器支持。
更多信息请访问 https://developer.mozilla.org/es/docs/Web/HTTP/Cookies
会话存储在处理请求的服务器上。为每个会话生成一个唯一标识符。
有一些针对会话的攻击:
- 会话修复 - 当攻击者知道会话ID时,他可以在URL中显式设置PHPSESSID。通常,这是在 cookie 文件中设置 的
- 会话端劫持,当您使用数据包嗅探器获取 cookie 并使用此 cookie 时。
- XSS 当有人将一些代码 f.e 放入 iframe 并且当您进入页面时,它会根据会话以您的权限执行代码
如果黑客按照您编写的操作进行操作,它将生成会话,但会在他自己的服务器上而不是在您的服务器上生成会话。默认情况下,PHP 将会话存储在 php 中设置的目录中.ini并且可以通过session_save_path();
函数查看。即使他执行相同的代码,他也无法访问$result->password_hash
因为我想它来自他无法访问的数据库。
希望你现在明白了。