The recent trend in HTTPS attacks is to attack the HTTP protocol. What should I do to increase my site's security if the only protocol I want is HTTPS?
Some easy to implement ideas are
- Implement HTTPS Strict Transport Security
- Issue the authentication page over SSL
- Use HTML Form-posts for the login page's submit button not CSS DIV's
- ... why? the user can't see the target URL when they hover
- Permit the client to cache the navigation page, as this will deter certain MITM attacks
- Use SSL-Only cookies
- Use an I-Frame Buster and the X-Frames-Options header
- Edit the cipher list to only use RC4, AES or PFS
More advanced/technical options may include
- Use DNSSec to protect vulnerable users
- Use SSL Only Cookies everywhere
- Use HTTPS padding on all AJAX data
- Only issue the "session key" over HTTPS
- Send off-site links to an intermediate page
Options that may break things (such as the user experience)
- Disallow web browsers that:
- ...don't clearly indicate the TLS status in the URL
- ...are subject to IDN attacks
- ...are unpatched
- Disallow port 80
- Only allow redirects from a whitelisted set of domains. Don't permit someone to link to your site, and force the user to type in the HTTPS URL
- Use a private certificate for all operations for that site. Issue the thumbprint (or RootCA) over a SSL connection
What are your thoughts on a website that implements some or all of these techniques?
What additional techniques would you recommend? (e.g. Use / Don't use OpenID, certain HTTP header directives, etc)