PHP会话有多安全?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我主要是一名C ++程序员,但我试图选择一些PHP。

显然,实现Web用户会话的方式是使用$ _SESSION变量将用户的登录ID存储在cookie中。

是否有人不可能修改他们的cookie,给他们不同的权限或以不同的用户身份登录?

看起来这种认证机制只是让用户将他们的ID存储在一个文件中 - 然后只是相信他们不会改变它。

有什么可以阻止吗?

提问于
用户回答回答于

不,会话存储在服务器上,不能被用户访问。它用于存储整个站点的信息,例如登录会话。

这是一个用法的例子:

<?php
session_start();
if ($_POST['password'] == "1234")
$_SESSION['auth'] = true;
?>

然后可以通过该站点访问该会话以检查用户是否已通过身份验证。

<?php
session_start();
if ($_SESSION['auth'] == true) {
    echo "You are logged in!";
}
?>

用户不能编辑这些值,但是会话的ID通过cookie作为长随机字符串存储在计算机上。如果未经授权的用户访问这些字符串,他们可能访问该网站。

用户回答回答于

这些信息取自PHP手册中的“会话管理基础”,但稍微简化了一下。有些东西可能已经错过了。一定要仔细阅读。

  • 始终使用 HTTPs
  • 防止攻击者阅读会话ID cookie
  • 启用session.use_strict_mode
  • 拒绝未初始化的会话ID
  • 确保创建的任何会话实际上都是有效的,因此你可以信任前缀(例如,如果前缀是$userId-
  • 启用sessions.use_only_cookies和禁用session.use_trans_sid
  • 通过共享带有会话ID的URL来避免用户共享会话ID
  • 防止会话标识出现在Referer标题中
  • 如果攻击者使用其他用户的会话ID,则重新生成会使用户或攻击者的会话失效,具体取决于哪个请求会重新生成ID。然后,您可以跟踪何人尝试使用已经重新生成的会话,并在此时使重新生成的会话无效。用户将能够登录,但攻击者(希望)将无法登录。
  • 可选地跟踪$_SESSION与请求相关的附加信息(IP地址,用户代理字符串等)
  • 如果攻击者以某种方式获得对会话ID的访问权限,那么攻击者可以在访问任何数据之前检测到入侵。但请记住,这可能会恶化用户体验。例如,当用户从移动网络切换到Wi-Fi时,IP地址可能会更改,并且用户代理字符串在浏览器自动更新时可能会更改。根据您的网站愿意处理的折衷调整检查的数据。

扫码关注云+社区