PHP会话处理程序和PHPSESSID生成/验证

时间:2015-07-22 03:26:13

标签: php session authentication cookies

我注意到PHP中有一个奇怪的行为。在php.ini中,session.hash_function设置为sha256,PHP生成适当的PHPSESSID,但是,它还会使用用户提供的 ANY 值即使它更短。

wget --header="Cookie: PHPSESSID=notrandom" "http://someserver.com/test.php"

例如,上面的行将触发会话处理程序并为notrandom创建一个新会话,就像它是一个有效的会话一样。

我的问题是双重的:

    • 这是正常/期望的行为吗?
    • 会话处理程序读/写函数是否有办法向PHP发信号通知所提供的会话ID无效(即不是sha256)并且会话无法启动?

    • 或者,如果客户端提供的会话ID无效(或者只是找不到),那么服务器生成自己的值(session_regenerate_id?)而不是使用由用户提供?

1 个答案:

答案 0 :(得分:2)

按照惯例,会议是为方便网站访问者而设的。使用复杂算法自动生成一个(对于新会话)这一事实仅有助于防止会话攻击,但不应该依赖它。在更有意义的Web应用程序中,应使用身份验证和授权来保护与Web服务器之间的请求和响应。

更具体地回答您的问题:

  1. 是的,这是正常/期望的行为。
  2. 请参阅@ 0x90的回复;然后使用session_status()documentation)决定下一步该做什么。
  3. 一旦您实施了上述#2的更改,您将处理收到无效会话的请求并创建有效会话或使用相应的响应代码进行响应的情况(403 - 禁止)。