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、会话)

在 php 中登录服务器端时在 android 中进行会话处理

PHP 会话变量的安全性如何?

php会话变量的安全性如何[重复]

站点安全正则表达式处理程序? (PHP) [关闭]

登录、用户身份验证、会话和 csrf 令牌 [关闭]