php - 这是对 session 变量的安全使用吗?

标签 php security web-applications

我使用 $_SESSION['name'] 来处理页面之间的数据。我主要用它来保持用户在页面之间登录。在每一页中,我检查 $_SESSION[logged_in'] 是否为真。如果为真,则让用户保持登录状态。否则,执行其他操作。

这就是我处理 session 的方式 - 基本示例:

<?php

session_start();

if($_SESSION['logged_in'])
{
   //show control panel list
}
else
{
     //show login box. Once user logs in. Once user logs in,
     //fetch userID, username, etc from database. Also set 
     //$_SESSION['logged_in'] = true.
}

?>

我在代码之间的某处执行以下操作:

SELECT * FROM User WHERE userID = $_SESSION['userID'];

我不确定用户是否可以访问 $_SESSION['userID']。如果它可以访问,那么该页面将受到威胁,因为用户可以手动更改用户 ID 并访问他/她想要的其他帐户。

我不太关心安全问题。请指教!我能做什么?

注意:我正在努力使代码尽可能简单。目前,不涉及任何 oop。

最佳答案

您的代码容易受到 session 固定和 session 劫持攻击。参见 http://phpsec.org/projects/guide/4.html获取更多信息。

当您构建更大、更复杂的应用程序时,您还需要注意如何处理用户注销和处理其他与 session 相关的方面,例如权限升级。安全地处理 session 和登录是一件棘手的事情。

实现安全身份验证很困难。除非您将其作为一项学术练习,否则我强烈建议您使用您的框架提供的库,如果您有幸拥有一个好的库的话。

您还需要考虑以下事项:

  • 不允许强制使用 session ID。 [ session 固定]
  • 当权限或凭据发生变化时(例如,因为用户现在已经登录或注销)然后 立即使 session 无效并开始一个新 session 。
  • 提供注销功能,并确保在注销时使 session 无效。
  • 将 session cookie 设置为 HttpOnly - 最好要求 HTTPS 并将 cookie 设置为仅安全。
  • 考虑限制 session 有效性以包括检查有助于匹配用户的一些其他信息,例如用户代理。 [ session 劫持]
  • 始终在不使用后使 session 过期,并且不通过将用户重新连接到他们的旧 http session 来实现“让我保持登录状态”。
  • 确保在 session 失效时销毁所有与 session 相关的数据,无论这些数据存储在何处。一个新用户出现,可能恰好被分配了一个以前使用过的 session ID。此新 session 不得访问之前针对该 session ID 设置的 session 数据。

关于php - 这是对 session 变量的安全使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318944/

相关文章:

php - "phpinfo(): It is not safe to rely on the system' s 时区设置...”

javascript - npm 漏洞对前端重要吗?

c# - 将密码传递给 Web 服务并存储它

javascript - 禁用webapp的ios5通知中心下拉

javascript - HTML 单选按钮数组

php - 您可以在 Guzzle POST 正文中包含原始 JSON 吗?

php - 从循环中排除当前帖子

security - Windows 备份读/备份写和 ACL

python - 设计一款可在浏览器中运行的网络游戏——我应该从哪里开始?

java - 模拟打印机