如何设置安全的PHP会话

问题描述:

与我之前的问题类似 - 我不是一个非常有经验的PHP程序员。我对赛会或安全性一无所知(其他就是我在一小时前所学的有关md5和sha1的知识)。如何设置安全的PHP会话

我有一个登录系统,我希望创建一个存储用户的用户名和加密的字符串的时间戳混合的会话。我知道如何创建字符串,但我对Sessions或它们的工作方式一无所知。

我已经在过去的一个小时内搜索了一个解决方案,但它们都显得过于基本或过时,我正在寻找具有具体安全性的东西,但也很简单(由于我的经验不足)。

我会(在管理页面上)检查用户是否已经登录,假设这个字符串是加密的?

我知道有类似的问题,但我需要一个完整的外行人的观点的答案,因为我不知道如何实现此解决方案。

感谢您的帮助,您可以提供

+0

感谢大家的意见和帮助,我想我现在已经想通了!干杯,丹 – 2010-08-20 12:55:42

我想创建一个会话存储和他们的用户名

为什么加密字符串?除非你解密它,否则使用散列值甚至是随机值没有任何优势。如果你解密它,那么密钥也必须存储在你的数据中 - 所以它的安全性由于默默无闻。

我会(在管理页面上)检查用户是否已经登录,假设这个字符串是加密的?

不要将用户名存储在会话变量中,直到它已被认证。然后,如果变量已填充,则知道用户已通过身份验证。

+0

顺便说一句,你已经有一个与会话相关的随机值 - 会话ID。 – symcbean 2010-08-20 12:01:07

+0

哦,我想我必须手动设置会话ID。因此,如果我想识别特定用户,我可以: $ _SESSION ['username'] = $ username; 然后在另一页我可以输出: 回声“你好”。$ _SESSION [ '用户名']; 是这样吗? – 2010-08-20 12:13:15

+0

@丹尼尔是的,就是这样。 – Artefacto 2010-08-20 12:47:06

用户在会话其标识符登录,存储之后。在管理页面上,读取此会话值并使用它来查询数据库以确定用户是否具有管理员权限。如果他没有显示错误。显然,这允许变化(例如,在会话中存储已经包含关于用户的管理状态的信息的User对象)。

$_SESSION中的数据不能(除非你做的事很愚蠢)被客户端篡改,因为它存储在服务器中。你不需要加密或散列任何东西。

有一些保护PHP会话的方法,但必须先了解需要的安全级别以及最终他/她做了什么。

这里是Corey Ballou的博客文章http://www.jqueryin.com/2009/11/20/php-secure-sessions/,我认为这足以证明您对保护PHP会话的疑虑。