如何安全是PHP会议?(How secure are PHP sessions?)

2019-07-29 00:21发布

我主要是C ++程序员,但我试图拿起一些PHP。

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

是没可能有人只是修改他们的饼干,给他们不同的权限或登录为不同的用户?

这样看来,认证机制只是让用户存储他们的ID在一个文件 - 然后就信任他们不会去改变它。

有什么阻止呢?

谢谢!

Answer 1:

不,一个会话存储在服务器上,并且不能被用户访问。 它是用来存储整个网站的信息,如登录会话。

下面是使用的一个示例:

<?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作为一项长期的随机字符串存储在计算机上的用户无法编辑这些值。 如果未授权用户获得访问这些字符串,可以为他们访问该网站。



Answer 2:

为您的应用程序使他们的PHP会话仅安全。 PHP的会话将会给用户一个伪随机字符串(“会话ID”),他们与自己的身份,但如果该字符串被攻击者截获,攻击者可以伪装成该用户。

该怎么办

此信息摘自“会话管理基础知识”中的PHP手册 ,但简化了一下。 有些东西可能已经错过。 请务必通过阅读为好。

  1. 始终使用HTTPS

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

    • 拒绝未初始化会话ID
    • 确保创建的会话实际上是有效的,所以你可以信任的前缀 (例如,如果前缀是$userId-
  3. 启用sessions.use_only_cookies和禁用session.use_trans_sid

    • 通过它与会话ID分享网址小心避免用户共享会话ID
    • 从出现在防止会话ID Referer
  4. 定期重新生成会话ID和再生后不久,老无效的会话ID

    • 如果攻击者使用另一用户的会话ID,再生会作废任一用户的或攻击者的会话,这取决于这使得该再生ID请求。 然后,您可以跟踪,当有人试图使用已经被再生的会话,并在该点无效再生会议。 用户将能够登录,但攻击者(希望)将不能够。
  5. 任选地跟踪在附加信息$_SESSION涉及所述请求(IP地址,用户代理字符串,等)

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


Answer 3:

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

  1. PHP会话ID是够硬猜测大多数用例。 并不比其他广泛使用的系统更难或更硬。

  2. 信任只有一个会话cookie(只有一个会话cookie是否存在等)似乎并没有走很远的安全,明智的我,无论在哪里这个会话cookie来自 - PHP或其他地方。

因此,简而言之:PHP会话的安全,因为你对他们的使用,使他们成为。 这是任何基于会话cookie的系统,我知道的事实。



Answer 4:

如果做到这一点:

$_SESSION['user'] = $username;

然后$username不会被直接存储在cookie中。 而不是唯一的会话ID会被生成和存储的cookie里面。

您存储在信息$_SESSION只存储在服务器端,并不会发送到客户端。 由客户端的后续请求,服务器将存储在cookie中,当你做的ID载入会话数据session_start()

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



Answer 5:

无论答案你在这个主题中,您最有可能不会,因为有对话题如此多的不同意见得到满足。 甚至有写在一般性会议和PHP安全整本书。

希望各位能到这里最好的答案很可能是“会话,你希望他们是安全的”。 更多的工作和注意事项的数量较多,显然使它们更加安全的使用,但实现本身会消耗更多的时间。 正如一切你多少来衡量安全是你需要足够安全的一个。



Answer 6:

既然你是一个C ++程序员,你只需要知道,客户端看到的会议只是在不同的地址空间(服务器),因此,该会话不能从客户端模式访问的指针。



文章来源: How secure are PHP sessions?