Hi Stas,

On Mon, Sep 26, 2016 at 3:18 PM, Stanislav Malyshev <smalys...@gmail.com> wrote:
>> Please read session_regenerate_id() example #2.
>>
>> Example #2 Avoiding lost session by session_regenerate_id()
>
> In this example, why you do session_commit() in my_session_start()?
> There's no point in writing stale session.
>
> I also see no code that actually removes old sessions - is it by design?

Yes. It's by design.
In general, users should not delete session data manually, but should
let GC do the job. It's described in new Session Security manaul page.

>
> I am also not sure why this code messes with session.use_strict_mode -
> which user code is not supposed to do, this should be possible to do
> without doing that.

Because current session module cannot distinguish if session ID come
from outside, i.e. session cookie/trans sid, or script. This could be
improved, but user should control session.use_strice_mode currently.

>
> In fact, thinking about it, I think the following can be done relatively
> easily: make session_regenerate_id(), if called with false, to put magic
> entries into old session that specify a) when it was regenerated and b)
> what was the new session ID.

I realized that accessible magic values in $_SESSION were unpopular
from discussions.  I proposed minimum change also and It was declined.

My last proposal was rather complex, but it does what you're suggesting.

Differences are, it hides timestamp from $_SESSION, timestamp is only
viewable via API.

>
> This would allow to implement example #2 in userspace much cleaner, and
> if we want to implement it further in session, we could add option to
> session_start to do so. But one could also use this data in your own
> session system if one wants to do it slightly differently.
>
> This still leaves the question of old sessions, but it's not new as
> session_regenerate_id(false) already exists and in general we have GC.

I guarantee it works.
However, it's not precise/secure.

Unprecise
  - Cannot make sure obsolete session removal.
  - Accessibility to obsolete session is controlled by GC. (Attackers
can keep it alive by simply accessing it)

Unsecure
  - No way to detect possible session hijack. (My last proposal omit
raising error because people seem to care about BC too much rather
than security. Adding error/exception is matter of few lines)

Timestamp based management is mandatory for precise/secure session management.
Question is who will be responsible? Session module or User?

Regards,

--
Yasuo Ohgaki
yohg...@ohgaki.net

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to