Login Forms Over HTTPS, Please
hacks.mozilla.org
hacks.mozilla.org
I'm glad they mentioned it. Too many people think their sites are secure if logged in sessions use https and everything else is http.
Their example is that an attacker could insert JavaScript to steal the password, however they could just as well change the form target from https to http which is even less noticeable.
There's also a more detailed post [0] with reasons and explanations. You can enable this setting in Firefox 44+ by setting `security.insecure_password.ui.enabled` to true.
0: https://blog.mozilla.org/tanvi/2016/01/28/no-more-passwords-...
At least for most of those the login is a separate protected page rather than a https iframe.
There are still parts of the world where caching proxies are used to conserve limited transit bandwidth; CDNs don't solve that.
Only if you're taking about a browser cache. Any other cache couldn't intercept the data and cache it without alerting the browser (unless you mess around with installing SSL certs).
Hard to believe this is still a common vulnerability. Of course, even in 2007 a significant number of bank and credit card web sites operated like this.
Came across this last year... have seen variations of it over the last 15+ years, but saw it in 'new' code last summer. :/
You can even submit your domain [2] so that current browsers automatically apply the https-only preference to your domain, even when it hasn't ever been contacted before. Cool, isn't it?
[1] https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security [2] https://hstspreload.appspot.com/
The times I've implemented full-page caching (generally using Varnish) I've set it up so nginx runs in front of Varnish handling SSL termination, which means that I still have SSL support even though I'm serving through a cache.
http://m.theregister.co.uk/2011/01/25/tunisia_facebook_passw...
I think that developers who are still using HTTP with passwords either don't understand the implications (and a tiny icon won't help), don't care, or don't have "management buy-in" to spend the time to fix it. Having the browser force best security practices will benefit them and everyone using their websites.
Breaking stuff is a last resort, nuclear option. There are many forgotten, old web apps that would totally stop working and people would switch to another, less secure browser as a result.
1Password will also refuse to autofill passwords when it can't verify the application's signature (for example, if Chrome hasn't been updated in a while).
But it was removed in later versions of Netscape and Internet Explorer, because everyone turned it off as soon as they made their first search engine query.
Today there should not be "do not display this anymore" checkbox.
If you really want to help your (clueless) users, never ever serve a login, registration or credit card form without CSP. It really helps - at least until the malware catches on (I already see "Kaspersky Labs" is injecting its domain into the CSP itself).
Man, World Of Warcraft flashbacks can be intense sometimes...
But yes, the best plan is to have HTTPS everywhere, something that looks a lot closer than it once did! Thanks NSA!
I don't follow your reasoning. Why wouldn't an MITM attacker modifying an HTTP response body to insert rogue Javascript also be able to modify the response headers to strip or alter the Content Security Policy?
I still am willing to bet that SSL is not impossible to MITM. Someone will manage to find a flaw in such a complex system.
This does mean that currently CSP can stop various malware-ish extensions, but also that it stops legitimate ones (e.g. say an extension wants to apply a certain font that the user finds more readable to the entire page). It's a tough tradeoff.
I suppose if one uses the same password for every account they have then knowing their password is more harmful than just having access to 1 site... but other than that it seems like a distinction without a difference.
If the cookie is set through HTTPS, the browser won't send it when loading HTTP resources. So the cookie won't be exposed that way.
We should still be using HTTPS for all traffic in 2016.
Regardless, what jordanlev said still applies. The session can be hijacked.
If the cookie is set through HTTPS and does not have the Secure flag set, the browser will happily send it along when loading HTTP resources.
Certain unnamed three letter organizations and nation states have the computing power to crack HTTPS encryption if they really want to, but using that power is expensive. Making sure all your traffic is encrypted makes it a lot harder for potential snoops to decide which traffic is worth spending the time and money decrypting and which isn't.
By using strong encryption for everything, even just reading wikipedia pages, you're doing everyone a favor by helping to make user privacy that much harder to violate.
Certain unnamed three letter organizations and nation
states have the computing power to crack HTTPS encryption
if they really want to
Some ciphers and key lengths are vulnerable, but I do not believe it to be true to say that the NSA can "crack HTTPS", outside of a suborned-CA MITM attack, which isn't at all deniable or subtle.If they want to get serious about it, they should just disable http support and require https for all actions. Or throw up a big in-your-face warning on http pages, not just make a small change to an obscure icon that nobody really understands.
Even though I agree with you, I think that it's still a little bit too early for that. My prediction is that the browsers are going to start experimenting with this near the end of 2016 and that it'll become a part of stable versions of browsers somewhere in 2017.
And that's beside a whole rake of issues from having http and https on the same domain. It's just easier to have https everywhere.
For what it's worth, this was not true ten (or maybe even five) years ago.
I'd say it's true today, for most websites, but it's worth keeping in mind that it's a relatively recent phenomenon that HTTPS is now pretty easy to set up, use, and maintain. That wasn't always the case!
To a first order approximation, yes, and for small and medium sites, that's pretty accurate. But for very large sites, there can be additional complications and expenses, and that situation has improved over the last several years. Don't underestimate the effect that the downward price of bandwidth over the years has had - at very large scale, those pennies can really add up.
There's a reason why sites like Google, Facebook, Reddit, Tumblr, etc. took so long to add SSL to everything Or why some sites like Comcast still don't provide it. It's not (always) that they simply don't care or don't have knowledgeable engineers; it's that the logistics of managing[0] SSL at that scale are non-trivial. Arguably worth it, yes, but it's not so straightforward.
[0] heck, the logistics of paying for - even with a CDN, the marginal cost of adding SSL is not cheap.
A prominent warning would be something ridiculous, like a full page cover saying "THIS PLACE IS NOT SECURE – HERE BE DRAGONS!" or something. Browser vendors should do more of this for egregious errors on the publisher's side. Unless users complain loudly that stuff is uncomfortable and broken and scary and what not, you can write articles like this every day of the week and publishers still won't do anything about it, and the only users to care will be the geeks who understand what the damn icon means in the first place.
there have been reports of replaced adds on unrelated pages with banners from the ISP and similar things
I have no idea why this easy change hasn't been made in the protocol.
https://developer.mozilla.org/en-US/Persona http://srp.stanford.edu/whatisit.html
Key based authentication is difficult for a layman to manage and understand. May mother can memorize a password and use it across computers. Asking her to do the same with a key will be difficult.
1.https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
https://hstspreload.appspot.com/
This fixes the remaining hole of the first visit.
However, one warning, if you like privacy, you should turn off HSTS or clear it on browser close at least. It's effectively a giant supercookie and it provides little security benefit over checking URLs for SSL yourself.
At the same time, for normal web users I can see how such a warning could be helpful. But it seems normal editions of Firefox won't have this enabled by default.
Or are my development practices unusual in some way?
I'm not sure what the situation is like for websites hosted on a LAN or using something like zero-conf, but I wouldn't be surprised if they do display the icon in those scenarios.
On sites that allow users to embed things like images (forums, comments, etc), in order to avoid mixed content warnings or interstitial confirmation dialogs, you either have to pipe everything through an SSL proxy, or severely limit the types of things users can embed.
Passwords are stupid. The internet is broken. My Spyware infested machine and browser knows all my passwords anyway.
Note to any techies reading this.. fix this problem. Here is your killer app. Disrupt this shit.
(Or, are there any websites still trying to support IE 6 or 5.5, apart from large online shops?)
That's a big difference. I'm a developer, not a hardware guy, so I don't know what causes the slowdown for us. I assume it's the actual setup and teardown of the HTTPS connection. That is a fairly significant difference when I want to use API's via HTTP/HTTPS and I need to make a lot of calls quickly.
My point is that HTTPS still seems to be 100x more computationally expensive than HTTP.
In order for me to get a TLS certificate where I work I have to create a CSR, fill in a word document, attach those to a Jira ticket, the operations team will then hand those over to a contractor who talks to our chosen CA. Up to 10 working days(!) later I get an OV certificate back.
How I wish we were allowed to use Lets Encrypt.
Plaintext HTTP is scary stuff these days.
This time we'll be safe.
The form, all its js assets and form api endpoint all have to be secured. And https for everything that contains code. Deploying SRI for web pages over https is also another layer of defense against js tampering.
Also, sending passwords across the wire in any reversible manner is really more dangerous than is necessary. Passwords/passphrases could be salted hashed by the browser in JavaScript using a PBKDF similar to scrypt or bcrypt, before being sent to the backend for constant-time comparison... it just takes a little more prudence and effort, but it's absolutely doable.
This is not safe! Now an attacker just needs to intercept the hashed password and replay that, and he gets to login without knowing what the password is.
Use https. And don't do client-side hashing, it's no improvement.
Well, it's an improvement if your users are reusing their passwords. Then multiple different sites will have different hashes sent.
But that's all besides the point, we should've been using zero knowledge proofs for authentication since the beginning.
It would be very nice if there was a feature in web browser that allowed user to opt in to something like this:
When there's a password input on a website: 1] automatically take website's domain concatenate it to plaintext password 2] generate a secure hash from 1] 3] Derive some reasonably portable text password (20-30 characters) from 2] 4] Make it so that original web page never has access to user's plaintext password 5] Submit result of 3]
Downsides:
1] Stupid websites enforcing password rules other than length (can be worked around mostly transparently). 2] Extra stupid websites limiting password length. (requires user interaction and configurable exceptions for such websites) 3] Can't login with browsers that don't implement this.
This would be very nice for people who share passwords between services. Also would make web service data leaks less valuable to attackers. User would not depend on service password handling quality and/or operator's morality.
I use different passwords for each and every service. But many people can't be bothered or don't get the risks of password sharing, so it would be at least some help to them.
For real-world, practicality's sake, the client-side of an app would contain the PBKDF or some AA code, as opposed to the traditional, slightly-riskier "let the server handle all of it"-approach... the server still has final say on authentication and authorization, just move some of it into client-side js. There's really not much impact on FE development considering most FEs and BEs are codeveloped these days anyhow.
Btw, for web devs Two-factor auth is cheap and easy to do, Google Authenticator OTP has open source libs and requires no calls to Google to work.
Furthermore, using plaintext any further from the owner or exposed longer than is necessary is inherently less secure because your breach of https would also compromise users' passwords.
Not the worst idea from the developer's point of view, but it doesn't protect the user: the site could still serve bad JavaScript which didn't properly hash the password (this, for example, is why Mozilla accounts are completely, totally and utterly insecure, and why Firefox password storing should never be used by anyone who doesn't wish to share his passwords with Mozilla, any Mozilla employee and any state which can compel any Mozilla employee). The browser needs to natively support doing this.
There's also the issue of replays. This topic has been well-studied; I believe that Secure Remote Password (SRP) is currently the gold standard for this.
As a devs, we use self signed certificates for building our products and we have trained QA to ignore the HTTPS with a slash through it as an error that is acceptable in dev.
(And ourselves for that matter)
That makes this one easy to miss.
My preference would be a browser-level warning bar to roll out over the page. Like the one used in 'this plugin is not installed'
This is a huge error and its much harder to miss that way.
http://www.theatlantic.com/technology/archive/2011/01/the-in...
https://chrome.google.com/webstore/detail/unsecure-login-not...
It seems we are finally getting it built in, as it should be!?
So, "figure out a new way to advertise." Welcome to disruption.
Google too is about to start shaming non-HTTPS connections (according to a recent article).
I've heard about the free one-year Cert. Is there any way to do HTTPS all in-house (permanently), without resorting to an external agency?
Much like email, https needs to go away in favor of a solution that incorporates a modern mindset.