Home > front end >  Mojolicious weird cookies
Mojolicious weird cookies

Time:10-30

I am playing around with Mojolicious and see session cookies have strang look:

mojolicious=eyJleHBpcmVzIjoxNjY3MDUyNTEzLCJ1c2VyIjoic2ViYXN0aWFuIn1aWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlo---8ec2dbb1e9eeb295f610826487a011f3516106cb8a814530e73212a1e6a10d8f

Do you know what these "WlpaWlpaWlpaWlpaWlpaWlpa..." mean? I see the signature is ok, data is ok, but WlpaWlpaWlpaWlpaWlpaWlpa... In base64 this is ZZZZZZ... Where they have come from? I have only this code to set up session:

$self->session(user => 'sebastian');

I am playing with it on the clean project. Protocol: HTTP (no SSL)

Mojolicious 9.28.

CodePudding user response:

This behaviour was added to Mojolicious in Pull Request #1791. The padding is intended to make it more difficult to brute-force the application secret that's used to sign secure cookies such as the session cookie. The choice of the padding character Z and the length of the padding seems arbitrarily chosen.

I think that this padding is almost entirely pointless as a security measure. As it is added in a deterministic manner it cannot make brute force attacks more difficult. As implemented, it's not even helpful to include the padding in the cookie, since the HMAC signature calculation can re-add the padding when necessary. In contrast, padding from a CSPRNG, without reusing padding patterns during the application's lifetime, would probably achieve the desired effect. Compare the concept of a salt for password hashes.

That you stumbled over this undocumented behaviour indicates a number of aspects:

  • Mojolicious is fairly fast moving, and doesn't always keep detailed documentation about all features.
  • Mojolicious tries to support reasonable security measures by default.
  • These security measures may or may not actually work.

If you want to secure your application secret against brute force attacks, it's important to create a strong cryptographically secure secret of suitable length (at the very least 128 bits of entropy). Ideally, your application would also regularly rotate secrets. Mojolicious supports having multiple active secrets, so that adding a new secret will not invalidate existing sessions.

  • Related