我使用 $_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/