0

我正在尝试理解 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 文档,但我仍然不明白。

4

2 回答 2

1

最终的会话是服务器发送给浏览器的 cookie。这个 cookie 很特别,有一些属性,比如:

  • 姓名。例如,在 php 中默认为 PHPSESSID
  • 价值。对于会话 id,标识服务器上 cookie 的随机字符串(此 cookie 具有相关数据,如用户名、电子邮件等)
  • 域:定义cookie的域范围,cookie将由浏览器发送(例如:非值表示仅主域服务器生成没有子域的cookie。域值默认包括子域)
  • Path:Path 表示在请求的 URL 中必须存在的 URL 路径,以便发送 Cookie 标头
  • Expires / Max-Age:在特定时间使 cookie 过期(例如:2018-08-03T17:30:56.146Z)
  • httpOnly:布尔值,如果为真则 cookie 不能被 javascript (document.cookie) 访问以防止 XSS 攻击
  • 安全:布尔值,如果真 cookie 必须在 https 下发送
  • 同一站点:SameSite cookie 允许服务器要求不应将 cookie 与跨站点请求一起发送,这在一定程度上可以防止跨站点请求伪造攻击 (CSRF)。SameSite cookie 仍处于试验阶段,尚未得到所有浏览器的支持。

更多信息请访问https://developer.mozilla.org/es/docs/Web/HTTP/Cookies

于 2018-07-04T17:41:51.063 回答
1

会话存储在处理请求的服务器上。对于每个会话,都会生成一个唯一标识符。

有一些针对会话的攻击:

  • 会话修复 - 当攻击者知道会话 id 时,他可以在 url 中显式设置 PHPSESSID。通常,这是在 cookie 文件中设置的
  • 当您使用数据包嗅探器获取 cookie 并使用此 cookie 时,会话端劫持。
  • XSS 当有人将一些代码 fe 放入 iframe 并且当您进入页面时,它会根据会话以您的权限执行代码

如果黑客做了你写的事情,它将生成会话,但在他自己的服务器上而不是在你的服务器上。默认情况下,PHP 将会话存储在文件中,目录在 php.ini 中设置,并且可以通过session_save_path();函数可见。即使他执行相同的代码,他也无权访问,$result->password_hash因为我猜它来自他无权访问的数据库。

希望你现在明白了。

于 2018-07-04T18:03:42.793 回答