Its between hard and impossible to build to systems perfectly that do this, whereas a server based lookup has a limited number of attacks that do not involve owning my boxes.
I have even written my own session handling wsgi middleware just because I don't understand encryption and cannot find a framework that doesn't try that.
When you are load balancing, request 1 goes to web/app server 1, the app server reads the session id from the cookie and read the session from the db..the next request goes to web server 2, web server 2 reads the session id from the cookie, loads the session from the db...
Each request being load balanced to a different web/app server doesn't affect the session. You are going to read the session id from the signed cookie, and then load the session from the db which is being shared between all of your web/app servers.
You can argue about solutions to each of these. My point is that each solution has their own problems. IMO, play's solution has worked well so far, making it easy to scale horizontally. I've been using play for 3 years. One security issue in 3 years, with a quick patch applied, is acceptable. Before that we used PHP, and we had many problems dealing with the huge volume of sessions to be handled.
This implementation appears to have a bug in the signing mechanism, which is pretty bad. That's why we use existing crypto libraries.
That's how we implement flaws in the process, around crypto libraries. The price of session-cache lookups is the price paid not to worry there is a serious undiscovered security flaw waiting for you around the corner.
Its a price you have to decide if its worth paying.
Isn't this what they invented things like Memcached and Redis for, though?
> I have even written my own session handling wsgi middleware just because I don't understand encryption and cannot find a framework that doesn't try that.
You wrote your own library that stores in plaintext because you weren't sure that pre-existing libraries were doing crypto correctly?
Why couldn't you treat those other libs' ciphertext as plaintext and apply your custom security engineering to it.
No crypto, just a lookup. Yes it introduces latency. But it is as secure as my servers are.
.formatCurrency('GBP')
no longer works
Needless to say, if you think 1.2.5 to 1.2.6 is bad, don't ever upgrade to 2.x!
https://docs.google.com/document/d/1OEt6gZ3a-daSkNXqXGAM4jBs...
(crawling back under my rock now...)