PHP中的Cookies和MAC

PHP中的Cookies和MAC,php,session,authentication,cookies,Php,Session,Authentication,Cookies,背景资料: 我正在创建一个非常小和简单的网站,需要允许用户登录,并看到他们只允许的页面。例如,如果用户登录并且是管理员,则可以看到admin.php,但如果用户不是管理员,则无法看到admin.php。Cookie用于允许用户在页面中导航,而无需重新验证 几个问题:MAC有什么用?我如何实现一个?根据: 客户端和服务器都有密钥,这怎么可能呢? 如果一个系统生成一个随机会话id,将会话id放入数据库(连同过期时间)并将会话id放入cookie中,那么该系统会怎么样呢。读取cookie后,检查coo

背景资料: 我正在创建一个非常小和简单的网站,需要允许用户登录,并看到他们只允许的页面。例如,如果用户登录并且是管理员,则可以看到admin.php,但如果用户不是管理员,则无法看到admin.php。Cookie用于允许用户在页面中导航,而无需重新验证

几个问题:MAC有什么用?我如何实现一个?根据:
客户端和服务器都有密钥,这怎么可能呢? 如果一个系统生成一个随机会话id,将会话id放入数据库(连同过期时间)并将会话id放入cookie中,那么该系统会怎么样呢。读取cookie后,检查cookie中的会话id与数据库中的会话id,这反过来会提取用户信息(无论他是否是管理员),如果数据库中的会话id过期,会提示客户端重新验证吗

我不能使用PHP会话,我必须使用cookies

谢谢


Kevin

如果您正在使用Cookie,则可以使用会话。无论如何,这是会话的首选方法。您将在cookie中存储会话ID。很好地描述了Cookie在缓解部分中的作用

MAC是一种验证消息的方法(顾名思义)。但它要求您可以安全地交换密钥。这对你的具体情况没有帮助

你可能对s感兴趣。简要说明:

鲍勃和爱丽丝有一把共用钥匙。爱丽丝想给鲍勃捎个口信。请注意,消息本身可以是公共的。但是鲍勃想确定这条信息确实是爱丽丝传来的。所以爱丽丝需要在留言上签名。因此,Alice接收消息,用密钥通过HMAC对其进行签名,并将消息连同结果签名一起发送给Bob

当Bob收到消息时,他和Alice在消息上签名时做的一样。他接过信息,在上面签名,然后比较签名

如果签名匹配,Bob可以非常肯定消息没有被篡改。这是真的。如果除此之外,Bob可以非常确定除了Alice之外没有其他人可以访问密钥,那么他也可以假设消息确实是Alice发送的

从签名中提取秘密非常困难(HMAC的H部分负责这一点)。MAC确保即使您收集了Bob和Alice之间的大量消息(以及其他一些攻击方法),也很难篡改这些消息


有时你会看到一些人只是使用散列函数来创建签名。使用。

使用PHP会话变量,而不是cookies。@Barmar我修改了问题,我不能使用会话,我必须使用cookies。您试图实现的基本上是会话如何工作。PHP生成会话ID,将其放入cookie中,并使用该ID查找包含会话数据的文件。“我不能使用会话”-为什么不能?@CBroe我的项目要求我使用cookie,会话是禁止的。或多或少,我只需要了解使用cookie验证用户身份的良好实践。