【问题标题】:Is it possible to have a secure web form without an https server?是否可以在没有 https 服务器的情况下拥有安全的 Web 表单?
【发布时间】:2010-10-05 16:37:36
【问题描述】:

我有一个托管在提供商上的网站,它没有给我一个固定的 IP 地址,所以我不能使用 https。我想以安全的方式使用网络表单编辑某些页面。

客户端是 iphone 类型的设备,因此 Java 或 Flash 小程序是不可能的。

  • 有没有办法只使用浏览器中的 javascript 在服务器和浏览器之间建立安全连接?

服务器上的语言目前是 php,但它可以是 ruby​​、python、perl 或 lua。

【问题讨论】:

  • 我不认为有一个固定地址与有可用的 https 有任何关系......你只需要提供者提供一个 SSL 证书并监听端口 443

标签: php javascript http https


【解决方案1】:

从技术上讲,安装 SSL 证书并不需要固定的 IP 地址 - SSL 证书与主机名(通用名称)相关联。我们经常更改主机上的 IP 地址,并且从未更改过与证书相关的任何内容。

也就是说,你确实可以使用 JavaScript 或类似的东西,但这并不是一个很好的解决方案——它总是闻起来像黑客。

【讨论】:

    【解决方案2】:

    您可以使用某种形式的public key encryption implemented in javascript

    • 您向客户端提供表单、您的公钥和一个 js 加密库
    • 提交时,js 开始加密表单负载
    • 你用你的私钥解密

    这将阻止任何人在网络上嗅探您的敏感信息,但不提供任何防止中间人攻击的保护。 SSL 使这种攻击更难实施,但并非不可能。

    【讨论】:

    • 如何防止嗅探网络上的敏感数据,而不是 MITM 攻击?他们不是一回事吗?
    • 并非如此 - 毕竟,未加密的流不需要 MITM 攻击来读取它。请注意,SSL 并不是提供更多 MITM 缓解措施,而是更难一些。
    【解决方案3】:

    不是传统意义上的,不是,但有几个选择:

    1. 获得更好的托管。您可以以每月 20 美元的价格获得 a VPS with a fixed IP。每年30美元的证书。对于需要安全的人来说相当便宜。

    2. 您可以加密表单数据using javascript and PGP。这很便宜(它会在您的用户看来),但它应该保证您的数据足够安全。

    3. 可能有第三方允许通过他们的服务器(并通过扩展)他们的证书提交表单。不过,您和您的用户必须相信他们不会滥用数据。

    【讨论】:

    • +1。获得更好的托管服务提供商可能是最好的选择。什么样的蹩脚托管服务商不支持固定 IP 和 SSL 证书?
    • 不是每个人都有钱购买静态 IP 或 SSL 证书。 (自签名仍然会导致浏览器中的弹出窗口在按设计提交表单时看起来像是错误)。
    【解决方案4】:

    理论中,您可以使用 Javascript 和 XmlHttpRequests 在客户端和服务器之间实现某种安全通信。在实践中,这听起来需要做很多工作,而且快速且真正安全的可能性似乎很低。

    正如 Alex 上面所说,即使您设法在 JS 中实现,您仍然必须通过不安全的连接将 JS 提供给客户端,因此这一切都毫无意义。

    不过,之前在 Javascript 中已经实现了更疯狂的事情......

    【讨论】:

      【解决方案5】:

      我会说答案是否定的。原因是没有 https,所有流量都是未加密的纯文本。因此,任何人都可以读取客户端的任何加密算法或密钥交换。不过我可能是错的……我从未尝试过。

      【讨论】:

      • 不管协议如何,密钥交换都必须在未加密的情况下工作..?
      【解决方案6】:

      理论上是可能的,前提是您可以控制客户端并且(例如)那里有可信的 javascript,但不是从服务器下载的。我可以详细说明,但与使用 https 相比,这些行中的任何内容都是 PITA 并且容易出错。

      另外,不需要固定 IP - 你有域名吗?

      【讨论】:

      • 在问题中提到的 iPhone 案例中,无法从服务器下载受信任的 Javascript。
      • 是的,如果它是一个网络应用程序 - 但从问题中不清楚是否可以选择原生应用程序。如果不是,那么除非主动攻击不是问题,否则 OP 想要做的事情是不可能的。
      【解决方案7】:

      如何使用 Javascript?为了让浏览器执行 javascript,它必须首先从(前面提到的)不安全的服务器下载它。 HTTPS 是一个服务器/客户端协议,所以如果你不能用服务器本身来实现,你将根本无法实现它。

      HTTPS 所需要的只是一个 IP 地址,因此即使更改也没关系。您应该能够使用带有动态 IP 的 HTTPS,但您可能需要与您的主机商交谈。如果您的主机在共享服务器上,那么它将无法工作,您将需要一个专用 IP。它们并没有那么贵,所以也许你应该每月支付 3/4 美元?

      亚历克斯

      【讨论】:

      • 你是对的。如果您依赖于从不安全的服务器下载 JS,那么您已经被搞砸了,因为 JS 可能会在途中被更改为恶意的,并且只是将未加密的数据发送到其他地方。将不安全页面发布到安全页面的原因与此相同。
      【解决方案8】:

      SSL 根据域名而不是 IP 地址运行。只要您拥有并拥有一个域名,并且有一个提供商愿意打开 443 端口并安装您为您的站点购买的证书,您就可以使用 HTTPS。

      话虽如此,假设你做不到,请查看SRP

      来自该站点:“SRP 是一种安全的基于密码的身份验证和密钥交换协议。它解决了将客户端安全地验证到服务器的问题......此外,SRP 交换一个加密强的秘密作为成功的副产品身份验证,使双方能够安全地进行通信。”

      他们有一个 Javascript 示例。您将使用副产品通过网络加密数据。

      但是,像大多数海报一样,您最好还是换一个新的提供商。

      【讨论】:

        【解决方案9】:

        差不多 2 年过去了,但现在 JavaScript 中有一个开源 SSL/TLS 实现。但是,它目前依赖 Flash 提供原始套接字访问......所以除非应用程序要在 android 手机而不是 iphone 上运行,否则它可能没有那么有用。

        http://github.com/digitalbazaar/forge/blob/master/README

        【讨论】:

          【解决方案10】:

          是的。您可以使用来自Private Forms 的嵌入式表单,使用 PGP 加密。

          Private Forms 是一种 SaaS,它在将数据发送到服务器之前在客户端对 Web 表单数据进行加密。然后,此加密数据将发送给您。所有数据都使用您的 PGP 公钥加密,只有您可以使用您的 PGP 私钥解密。

          因此,填写表格的人知道它是“安全的”,但他们不需要熟悉细节(例如生成密钥等)。

          【讨论】:

            猜你喜欢
            • 2013-01-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-29
            • 1970-01-01
            • 2018-09-15
            相关资源
            最近更新 更多