PHP 登录和处理会话安全
Posted
技术标签:
【中文标题】PHP 登录和处理会话安全【英文标题】:PHP Logging in and Handling Session Security 【发布时间】:2015-07-18 15:04:35 【问题描述】:我正在开发一个社区页面,我已经查看了很多与登录安全相关的内容,但我仍然对如何保护会话感到困惑。成功登录后我唯一要做的就是将$_SESSION['username']
设置为他们的用户名。
用户注册,我使用准备好的语句插入数据库。密码存储使用
password_hash($password, PASSWORD_DEFAULT).
登录从数据库中获取哈希密码并使用
password_verify($password, $storedPassword)
如果 password_verify 为真,我将他们的用户名设置在会话令牌中。我应该做更多吗?我也应该在会话中存储密码吗?并不断检查以确保这两个令牌在每个页面上都匹配?
提前感谢您的帮助,我发现缺乏有关如何处理登录后安全性的信息。
【问题讨论】:
会话数据保存在服务器端。除非您在共享服务器上,否则您不必做任何事情来“保护”它。用户更改会话数据的唯一方法是使用您的代码 - 因此,如果您的代码是“安全的”,那么会话也是“安全的”。 谢谢 Marc,这就是为什么我只做这么简单的事情。我在搜索时发现的所有内容都表明不可能欺骗会话。我很难相信它会这么简单...... 可能会窃取/欺骗会话 COOKIE,但直接修改存储在 $_SESSION 中的数据意味着您的服务器和/或站点无论如何都已被入侵。 【参考方案1】:session不需要设置密码。没有人可以窃取你的信息,因为php是一种服务器脚本语言。一旦会话开始,您的 PHP 代码将自动处理它。
【讨论】:
【参考方案2】:在某种程度上,我的公司已经发布了两篇关于这个主题的博客文章。一个是关于safe and secure PHP sessions,另一个是关于user authentication with remember me cookies。
简短的回答是存储在会话变量中的数据本质上是私有的。您可以只存储行 ID 和用户名,然后就可以收工了。您的安全应该专注于控制进入 $_SESSION
的内容,而不是验证已经存在的内容。
【讨论】:
以上是关于PHP 登录和处理会话安全的主要内容,如果未能解决你的问题,请参考以下文章
这对于用户登录和验证是不是足够安全? (PHP、MySQL、会话)