PHP 会话设置在另一台服务器上
PHP sessions set on another server
我正在尝试理解 php 中的 session。
据我了解,在基本登录系统中,sessions 的工作方式如下:
在页面 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'] 中设置了一个值,这样他就可以登录,甚至不需要密码。
我对 session 这件事感到很困惑。我阅读了 php 文档,但我还是不明白。
最后一个session是服务器发送给浏览器的cookie。这个 cookie 很特别,有一些属性,比如:
- 姓名。例如,在 php 默认情况下,PHPSESSID
- 值。对于 session id,一个随机字符串,用于标识服务器上的 cookie(此 cookie 具有关联数据,如用户名、电子邮件等)
- 域:定义cookie的域范围,cookie将由浏览器发送到其中(例如:非值表示只有主域服务器生成没有子域的cookie。域值默认包括子域)
- Path:Path 表示 URL 路径必须存在于所请求的 URL 中才能发送 Cookie header
- Expires / Max-Age:cookie 在特定时间过期(例如:2018-08-03T17:30:56.146Z)
- httpOnly: 布尔值,如果为true则cookie不能被javascript访问(document.cookie)以防止XSS攻击
- Secure: 布尔值,如果为真cookie必须在https下发送
- 同一站点:SameSite cookie 让服务器要求 cookie 不应与 cross-site 请求一起发送,这在一定程度上可以防止 cross-site 请求伪造攻击 (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
,因为我猜它来自他无权访问的数据库。
希望你现在明白了。
我正在尝试理解 php 中的 session。 据我了解,在基本登录系统中,sessions 的工作方式如下: 在页面 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'] 中设置了一个值,这样他就可以登录,甚至不需要密码。 我对 session 这件事感到很困惑。我阅读了 php 文档,但我还是不明白。
最后一个session是服务器发送给浏览器的cookie。这个 cookie 很特别,有一些属性,比如:
- 姓名。例如,在 php 默认情况下,PHPSESSID
- 值。对于 session id,一个随机字符串,用于标识服务器上的 cookie(此 cookie 具有关联数据,如用户名、电子邮件等)
- 域:定义cookie的域范围,cookie将由浏览器发送到其中(例如:非值表示只有主域服务器生成没有子域的cookie。域值默认包括子域)
- Path:Path 表示 URL 路径必须存在于所请求的 URL 中才能发送 Cookie header
- Expires / Max-Age:cookie 在特定时间过期(例如:2018-08-03T17:30:56.146Z)
- httpOnly: 布尔值,如果为true则cookie不能被javascript访问(document.cookie)以防止XSS攻击
- Secure: 布尔值,如果为真cookie必须在https下发送
- 同一站点:SameSite cookie 让服务器要求 cookie 不应与 cross-site 请求一起发送,这在一定程度上可以防止 cross-site 请求伪造攻击 (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
,因为我猜它来自他无权访问的数据库。
希望你现在明白了。