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

PHP会话处理程序和PHPSESSID生成/验证,php,session,authentication,cookies,Php,Session,Authentication,Cookies,我注意到PHP中有一个奇怪的行为。在php.ini中,session.hash_函数被设置为sha256,php生成一个适当的PHPSESSID,但是,它也会接受用户提供的任何值,即使它要短得多 wget --header="Cookie: PHPSESSID=notrandom" "http://someserver.com/test.php" 例如,上面的一行将触发会话处理程序,并为notrandom创建一个新会话,就像它是一个有效会话一样 我的问题有两个方面: 这是正常/期望的行为吗?

我注意到PHP中有一个奇怪的行为。在php.ini中,session.hash_函数被设置为sha256,php生成一个适当的PHPSESSID,但是,它也会接受用户提供的任何值,即使它要短得多

wget --header="Cookie: PHPSESSID=notrandom" "http://someserver.com/test.php"
例如,上面的一行将触发会话处理程序,并为notrandom创建一个新会话,就像它是一个有效会话一样

我的问题有两个方面:

这是正常/期望的行为吗? 会话处理程序读/写函数是否有方法向PHP发出信号,表明提供的会话ID无效,即不是sha256,会话无法启动

或者,如果客户端提供的会话ID无效或只是找不到,服务器生成自己的值session\u regenate\u ID是否更有意义?而不是使用用户提供的


是的,这是一个安全问题,因为它会导致会话固定。这类漏洞非常常见,也同样经常被利用

您需要设置会话。在PHP.ini中使用_strict_mode=On可防止PHP接受这些任意设置的会话ID


来源:

是的,这是一个安全问题,因为它会导致会话固定。这类漏洞非常常见,也同样经常被利用

您需要设置会话。在PHP.ini中使用_strict_mode=On可防止PHP接受这些任意设置的会话ID


资料来源:

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

要更具体地回答您的问题:

是的,这是正常/期望的行为。 参见@0x90的响应;然后使用会话状态来决定下一步要做什么。 一旦您实现了上面2中的更改,您就可以处理接收到无效会话的请求的情况,并创建一个有效会话,或者使用相应的响应代码403-禁止响应。
会议,按照惯例,是为了方便网站的访问者。使用复杂算法为新会话自动生成一个会话的事实只能帮助防止会话攻击,但不应依赖于此。在更有意义的web应用程序中,应该使用身份验证和授权来保护与web服务器之间的请求和响应

要更具体地回答您的问题:

是的,这是正常/期望的行为。 参见@0x90的响应;然后使用会话状态来决定下一步要做什么。 一旦您实现了上面2中的更改,您就可以处理接收到无效会话的请求的情况,并创建一个有效会话,或者使用相应的响应代码403-禁止响应。
知道了!session_status可能是一个不错的选择,但我还没有5.3版本的PHP5.4,所以我找到了一个解决方法,使用自定义会话处理程序读取并检查提交的PHPSESSID是否存在。这仅在需要现有会话的页面上执行-其他将调用会话_start并绕过此问题/解决方案。明白了!session_status可能是一个不错的选择,但我还没有5.3版本的PHP5.4,所以我找到了一个解决方法,使用自定义会话处理程序读取并检查提交的PHPSESSID是否存在。这仅在需要现有会话的页面上执行-其他将调用会话_start并绕过此问题/解决方案。