PHP会话的安全性如何?

Jam*_*mes 30 php session-cookies

我主要是一名C++程序员,但我正在努力学习一些PHP.

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

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

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

有什么东西阻止了这个吗?

谢谢!

0b1*_*011 39

PHP会话仅在您的应用程序提供时才是安全的.PHP会话将为用户提供伪随机字符串("会话ID"),以便他们识别自己,但如果该字符串被攻击者截获,则攻击者可以伪装成该用户.

该怎么办

此信息来自PHP手册中的"会话管理基础",但稍微简化了一下.有些事情可能已经错过了.一定要仔细阅读.

  1. 一直用 HTTPS

    • 防止攻击者读取会话ID cookie
  2. 启用session.use_strict_mode:

  3. 启用sessions.use_only_cookies和禁用session.use_trans_sid

    • 通过共享包含会话ID的URL,意外地避免用户共享会话ID
    • 阻止会话ID出现在Referer标头中
  4. 定期重新生成会话ID再生后不久,老无效的会话ID

    • 如果攻击者使用其他用户的会话ID,则重新生成将使用户或攻击者的会话无效,具体取决于使请求重新生成ID的请求.然后,您可以跟踪某人是否尝试使用已经重新生成的会话,并在此时使重新生成的会话无效.用户将能够登录,但攻击者(希望)将无法登录.
  5. (可选)跟踪$_SESSION与请求相关的其他信息(IP地址,用户代理字符串等)

    • 如果攻击者以某种方式获得对会话ID的访问权限,则可能会在攻击者访问任何数据之前检测到入侵.但请记住,这可能会恶化用户体验.例如,当用户从移动网络切换到Wi-Fi时,IP地址可能会改变,并且当用户代理字符串的浏览器自动更新时,用户代理字符串可能会发生变化.根据您的网站愿意处理的权衡调整检查的数据.

  • @AymDev不幸的是,是的.由于从LTE切换到WiFi,IP可能会发生变化.浏览器版本可能会随着自动更新而改变.我已经更新了答案并附上了相关说明,并添加了一些额外的(以及更好的)建议来保护PHP会话. (2认同)

Jam*_*mes 17

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

以下是用法示例:

<?php
session_start();
if (password_verify($_POST['password'], $hash)) {
    $_SESSION['auth'] = true;
}
?>
Run Code Online (Sandbox Code Playgroud)

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

<?php
session_start();
if ($_SESSION['auth']) {
    echo "You are logged in!";
}
?>
Run Code Online (Sandbox Code Playgroud)

用户无法编辑这些值,但会话的ID通过cookie作为长随机字符串存储在计算机上.如果未经授权的用户获得对这些字符串的访问权限,则他们可以访问该站点.

  • @James,*会话信息*未公开存储,但*会话ID***为**.应采取额外的预防措施来防止这种情况发生.看我的回答. (4认同)

d_i*_*ble 6

如果这样做:

$_SESSION['user'] = $username;
Run Code Online (Sandbox Code Playgroud)

然后$username就不会直接存储在cookie中了。相反,将生成一个唯一的会话 ID 并将其存储在 cookie 中。

您存储的信息$_SESSION仅存储在服务器端,永远不会发送到客户端。在客户端的后续请求中,服务器将通过存储在 cookie 中的 id 加载会话数据session_start()

它相对安全。唯一可能发生的事情是有人可以拦截会话 ID,从而窃取真正的用户会话。HTTPS 可以防止这种情况发生。


Eug*_*eck 5

回答这个问题需要两种方法:

  1. 对于大多数用例,PHP会话ID很难猜测.没有比其他广泛使用的系统更难或更硬.

  2. 只信任一个会话cookie(并且只存在会话cookie)对我来说似乎不是很安全,无论这个会话cookie来自哪里 - PHP或其他地方.

因此,简而言之:PHP会话是安全的,因为您使用它们会使它们变得安全.对于我所知道的任何基于会话cookie的系统都是如此.