I'd be curious to know if anyone here can come up with a good enough reason for sending out the user's email & their password(-prefix) at every keystroke?
I'd be curious to know if anyone here can come up with a good enough reason for sending out the user's email & their password(-prefix) at every keystroke?
And then he included the email too, so the backend could look up the user and make a custom password blacklist for this specific case (eg: no personal details allowed).
I actually don't disagree with doing a POST of a password to check password strength server-side. It might be "cheaper" a bit in some cases.
But sending on every keypress and including the email - that's just silly.
Ebay is not a two bit software startup, it's an eCommerce powerhouse with extensive QA processes.
Yet, those kind of bad decisions are made every day, by people all around the world. I wouldn't give benefit of the doubt to anyone these days.
So it's a bit naive to assume devs at popular companies don't make bugs, they are superhumans, etc :)
eBay is sufficiently large, and old-enough, to have substantial tech debt.
Manager: "We need password strength validation." Tech: writes code to send each character of password to server as cleartext Tech: "Done"
I wonder if it ties into their fraud detection systems somehow.
Fraudsters are lazy - so lazy that, for a good long time, you'd see the exact same few recycled photos of counterfeit items being used in item descriptions. No idea if that's changed recently.
Anyway, going back to my main point: I wonder if something about password entry and email address choice serves as an early warning flag.
I'd kinda be surprised, but I could imagine it potentially being useful.
Which would explain why Ebay would be secretive. Because the detection is easily mitigated if attackers become aware of the detection.
But to what end? A valid password is a valid password whether it comes from user that takes 2 minutes to type it in, a password manager, or a bot.
Of course you can't trust anything from the client and both methods are subject to tampering, I'm not sure which is more tamper resistant.
Maybe they don't want to make it public by doing it it JavaScript.
Or they want to disallow reusing previous passwords, without leaking them to the client.
If I were in charge of both requirements and implementation I'd debounce the input by 300-500ms and display a "loading" spinner in the password complexity box until the debounce timer and network request had fully resolved.
I was just trying to explain why, given some business use-cases, doing password validation on the client isn't always possible.
Or perhaps they want to check the user's password choice against a multilingual dictionary, and they decided to save the user the multi-megabyte download?
I prefer seeing one system or the other, but not both.
If you have rules, don't use a password strength meter. Rules are going to be a binary result - "yes the password is good enough", or "no, this password is not acceptable" - which is represented by showing which rule(s) were not respected by the user, or a green checkmark.
A password strength meter can be used when there are no rules enforced, to let the user decide for themselves whether that red progress bar showing a weak password is good enough for their needs. The meter doesn't need to be binary, with red/orange/yellow/green stages. The only reason I don't like password strength meters in general is that there is no standard across sites/services as to what constitutes a strong password. One site will show "password123" as weak, while another will say it's fairly strong. Each implementation has its own arbitrary algorithm that is likely not representative of "true strength".
zxcvbn is actually a great password strength library, JavaScript, client-side, and only about 400 kB or so last time I checked (compressed, including (!) dictionaries). It was developed by a Dropbox engineer for the password setting/changing dialog at Dropbox, and open sourced, if I'm not mistaken.
Again, this is a great tool, client side, small (smaller than most webpages and adds these days at any rate), and it also allows to provide a list of "custom black list words" not to use in the password (e.g. username, site name, etc.).
AFAIK, zxcvbn really is the gold standard here.
Given this, I don't really see how a server-side check is better or necessary. Ebay really ought to provide a much better answer than "trust us" here.
Besides, the password strength js can easily be loaded async.
As an aside, I have always wondered how it is possible to disallow reusing previous passwords if the password is only saved on the server as a salted hash, which is recommended I believe.
Is it possible?
The timing information, despite possibly arriving with a bit of a delay will be just fine. Not only that, but if they really wanted they could just grab the TCP timestamps.