作为用户,我如何知道发送到服务器的用户名和密码是否使用 HTTPS 加密?让我用以下两个例子来抢先回答“寻找小锁”或“在 URL 中寻找 https”的问题:
首先,假设我浏览 bank.com 的网站。当我进入登录页面时,地址栏中的 URL 显示“https://www.bank.com/login.php“。我输入我的用户名和密码,然后点击提交。
但是,身份验证表格上写着:
<form action="http://www.bank.com/login.php"> ... </form>
显然,我的凭证没有通过 HTTPS 发送。正如您可能想象的那样,第二个示例恰恰相反。我浏览 bank.com 并显示“http://www.bank.com/login.php“页面。不过,这次的表单使用的是 HTTPS:
<form action="https://www.bank.com/login.php"> ... </form>
由此可见,我们不能相信浏览器中的锁定符号,也不能相信地址栏中的“https”。
我认为我确实有两个跨越SO和SU的问题:
- SU:普通用户(不懂 HTML/编程)如何有效地执行这样的检查?
- 那么:网站(或浏览器)如何帮助用户执行此检查?
答案1
- 对于不懂技术的用户,您能做的并不多。在浏览器中启用通过 HTTP 从 HTTPS 发布的警告是您的最佳选择。如果可用,默认情况下可能会启用此功能。但是,表单通常不会指定站点或协议,而是使用提供表单的站点和协议提交回发送表单的服务器。在这种情况下,如果表单是通过 HTTPS 提供的,则提交也将如此。
- 网站应该运行认证测试,以确保登录表单需要 HTTPS。这在大多数 Web 服务器中相对容易做到。如果他们处理信用卡,则需要认证其网站和基础设施。他们还应确保登录表单仅使用 HTTPS 提供服务。
HTTPS 并不一定表示您的数据已加密。可以启用相对较低的安全协议。服务器和浏览器协商加密级别。在允许的情况下(某些国家/地区有限制),您可以在浏览器中禁用较低的安全协议。(执行此操作的屏幕并不总是很容易找到。)通常更容易检查特定连接的安全性。
答案2
显然,我们不能相信浏览器中的锁定符号,也不能相信地址栏中的“https”
我原本以为一个正常的浏览器会在 HTTPS 网站上的表单提交到非 HTTPS URL(您的第一个例子)时向您发出警告。但经过进一步测试后发现,这种说法只是部分正确†。2013 年 4 月:
Safari 6.0.4、Mobile Safari 和 Firefox 20(在 OS X 10.8 和 Windows 7 上)确实会显示警告(提交到同一个 URL 时和提交到其他域时)。
Chrome 26 (在 OS X 10.8、Android 4.1 和 Windows 7 上) 以及 Internet Explorer 9 和 10 (在 Windows 7 上) 根本没有警告。
因此,为了在显示警告的浏览器上获得最佳用户体验,登录页面本身也应该由 HTTPS 提供。任何银行都会这样做。在没有这样做的网站上,用户确实需要自己进行验证,或者安装插件或使用某些 Greasemonkey 脚本来装饰安全表单,或者显示一些警告。对于 Chrome第三方扩展也可用,但我从未使用过。
__________
†想想看,也许我喜欢这种改变:它可能会让更多的人们在其网站上启用 HTTPS,而不必担心与尚未使用 HTTPS 的第三方网站交互时出现警告。
答案3
Force-TLS 要求您指定需要 https 通信的站点。有关用法和原因的文章在此处:http://techcrunch.com/2010/10/25/firesheep/ 我认为这可能回答这两个问题