PHP 会话的安全性如何?该怎么办
2022-08-30 12:34:31
我主要是一个C++程序员,但我试图学习一些PHP。
显然,实现Web用户会话的方法是使用$_SESSION变量将用户的登录ID存储在cookie中。
难道有人不能修改他们的cookie,给他们不同的权限或以不同的用户身份登录吗?
似乎这种身份验证机制只是让用户将其ID存储在文件中 - 然后只是信任他们不会更改它。
有什么东西可以阻止这种情况吗?
谢谢!
我主要是一个C++程序员,但我试图学习一些PHP。
显然,实现Web用户会话的方法是使用$_SESSION变量将用户的登录ID存储在cookie中。
难道有人不能修改他们的cookie,给他们不同的权限或以不同的用户身份登录吗?
似乎这种身份验证机制只是让用户将其ID存储在文件中 - 然后只是信任他们不会更改它。
有什么东西可以阻止这种情况吗?
谢谢!
PHP 会话仅在应用程序创建时才是安全的。PHP会话将为用户提供一个伪随机字符串(“会话ID”),以便他们用来标识自己,但是如果该字符串被攻击者拦截,则攻击者可以假装是该用户。
此信息摘自 PHP 手册中的“会话管理基础知识”,但进行了一些简化。有些东西可能被遗漏了。请务必通读。
$userId-
)启用session.use_only_cookies
和禁用session.use_trans_sid
Referer
定期重新生成会话 ID,并在重新生成后不久使旧会话 ID 失效
(可选)跟踪与请求相关的其他信息(IP 地址、用户代理字符串等)$_SESSION
否,会话存储在服务器上,用户无法访问会话。它用于存储整个站点中的信息,例如登录会话。
下面是一个用法示例:
<?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 作为长随机字符串存储在计算机上。如果未经授权的用户获得了对这些字符串的访问权限,则他们可以访问该网站。