HTTP 页面上的信用卡表格存在 MITM 风险?

信息安全 http 中间人 信用卡
2021-08-23 14:16:22

前几天,有一个关于筹款页面的网络开发者邮件列表线程。

一位人士指出,带有信用卡表单的页面是 HTTP,而不是 HTTPS。

对此,一位人士表示,由于表单的目标是 HTTPS,所以没问题

不,表单是通过 https 提交的,由 Stripe 提供。该网站本身是http,但...

然而,有人反驳说这还不够

您尚未确定该表单是安全的。MITM 可以修改http://example.com/响应中的 HTML 以替换表单的“action”属性。

有问题的网站已经更改,因此转到http://example.com会将您带到https://example.com,所以它现在(希望)是安全的,但我想知道以供将来参考。

信用卡表单是否在 HTTP 上,但目标是 HTTPS,是否存在 MITM 攻击的安全风险?

4个回答

是的,最后一个人是正确的,除了加密(机密性)之外,HTTPS 还可以保证表单来自您认为的位置(身份验证),并且在传输过程中没有受到干扰(完整性)。如果没有 HTTPS,则可以由 MITM 修改表单,如所述。

使用 HTTPS 只是一种不好的做法(因为用户通常是最薄弱的环节),当输入重要数据时,用户应该期望在每一步都能看到 HTTPS(挂锁/绿条/其他),没有例外。

如果您从 HTTPS 页面 POST 到非 HTTP URL,大多数浏览器默认会发出警告,但它们并没有都清楚地表明您的数据在相反的情况下正在安全地发送。缺少 HTTPS 也意味着该站点不会使用“安全”cookie。

另请参阅:从 HTTP 发布到 HTTPS 是一种不好的做法吗?

正确解决此问题需要HTTP STS ( RFC6797 ),但在大多数情况下,第一个 HTTP 请求仍然存在引导问题。

一个类似的问题是在iframeHTTP 页面中使用 HTTPS 站点的做法,例如第 3 方信用卡服务。在这种情况下,尽管表单和帖子是 HTTPS,但无法保证包含iframe. 浏览器没有显示表单是 HTTPS(至少不是以正常方式,如果有的话),所以这也违反了安全意识用户的期望。

中间的人可以轻松地操纵发布目标,因此它不再指向安全的 HTTPS url。用户无法看到目标是否安全(不查看 HTML 代码),因此他只需要相信 POST 目标是安全的。

这种调用安全 HTTPS url 的不安全 HTTP 表单方案总是容易受到SSL-strip 的攻击。

虽然有些答案确实很有帮助,但他们都忽略了一个非常重要的方面,即恶意代码注入。

MITM 能够修改通过 HTTP 提供给您的页面,从而使他能够注入恶意 Javscritpt,例如,等待您将鼠标悬停在提交按钮上,然后向攻击者的服务器发送 Ajax POST 以发送表单信息。这基本上是突尼斯政府为获取持不同政见者的 Facebook 凭据所做的事情。

因此,据我所知,通过 HTTP 提供表单存在两个安全问题(嗯,它们实际上是一个,但可以通过两种不同的方式加以利用):

  1. 攻击者更改提交目标(action字段)
  2. 攻击者注入 Javascript 代码,将表单数据发送给第 3 方。

好的,要明确的是,您不应该作为站点开发人员这样做,但是如果您需要使用以这种方式运行的站点,我的回答旨在说明可以安全地完成什么。基本上,您不能信任页面本身的任何内容,您可以信任的是,如果 SSL 证书解析,则帖子正在与合法服务器对话,以获取它声称的 URL。您必须手动验证它是否发送到该 URL 并且它是适当的 URL。仅当响应转到为该页面提供服务的同一顶级 URL 时才能执行此操作,因为您知道您正在尝试连接到该顶级域。

只要用户正在验证发布目标是预期的服务器,并且发布连接是 HTTPS,并且没有脚本可以改变页面上的内容并且浏览器不会通过 HTTPS 链接发送如果没有被发送到的 URL 的有效证书,那么表单将是完全安全的。请注意,只有当它发布到与托管页面相同的 TLD 时,您才能知道预期的服务器。例如,您不会知道 www.bob.com 告诉您将表单提交到 www.bobspayments.com 是否有效。也有可能,如果提交给两个不同服务的相同信息会做不同的事情,那么恶意用户可能会利用它。问题是用户不会这样做。它确实可以防止被动嗅探,但不会

活跃的 MITM 攻击者可以简单地更改页面以将信息返回给他们,但话又说回来,即使页面本身是 HTTPS 也可以这样做,因为许多用户不会注意到它实际上是返回的 HTTP 页面,所以我不确定是否真的存在来自活动 MITM 的更大威胁,因为无论哪种情况。

真正的问题是用户体验以及它向用户显示的页面不受保护的事实,因此出于这个原因,HTTPS 对于整个页面仍然是可取的。需要澄清的是,如果页面内容不真实,可能会出现很多问题,因此最好证明真实性,但只要信息实际上是通过 SSL 提交的,那么它就会受到保护。问题是保证它不会手动检查页面代码。