【问题标题】:SSL: Do I need to secure every endpointSSL:我是否需要保护每个端点
【发布时间】:2017-02-28 09:07:08
【问题描述】:

我目前正在构建几个连接到 API 的网络应用程序(使用 Angular 构建为 SPA)。这些应用和 API 都使用 SSL。

最近,我们的一些客户需要连接到我们的 API 以进行身份​​验证(使用来自 OAuth2 的资源所有者密码凭据授予),但他的网站没有使用 SSL。

所以我的问题与安全有关。如果 API 使用 SSL,但请求来源(我客户的网站)不是,那么发送到 API 的数据是否安全?

使用来自 OAuth2 的资源所有者密码凭据授予,用户凭据实际上作为 POST 发送到 API。这些必须加密(中间人攻击)。

据我了解,它仍然是安全的,因为客户端需要使用它的密码与服务器握手。但我想确定的是,解释是非常受欢迎的。

【问题讨论】:

    标签: api security ssl oauth-2.0


    【解决方案1】:

    如果您的 API 只能通过 SSL 访问,并且客户端正确(!!)检查您的证书以防止中间人攻击,那么客户端(即您的客户端服务器)和您的 API 之间发送的数据是安全的,但是仅用于此连接。这种保护不会扩展到以纯文本形式发送到网站本身的数据,即用户登录:

     user(browser)  <-- http --> website of client <-- https --> API
                       ^^^^^^                         ^^^^^^^
                      INSECURE                         SECURE
    

    这意味着用户发送到客户网站然后转发到您的 API 的密码仅在第二步中受到保护,而在第一步中不受保护。

    【讨论】:

    • 感谢您的回答。所以实际的行为是在客户端的网站上,会有一个登录表单。提交时,数据将异步 (Ajax) 发送到 API。在这种情况下,数据是否安全?
    • @lkartono:同样,数据传输仅从网站到您的 API 是安全的,而不是在浏览器和网站之间。这意味着它们显然不安全,因为它们可以被浏览器和网站之间的攻击者拦截。
    • 很有意义。谢谢:)
    【解决方案2】:

    这里涉及以下两种不同的情况。

    1) 用户与您的客户网站交换信息。 (非安全通道)

    正如您所说的客户端网站没有使用 SSL,这意味着最终用户的所有个人信息都将以纯文本形式传输,网络犯罪分子可以通过充当中间人轻松访问数据中,窃听等网络攻击。

    2) 客户端网站数据与 API 通信。 (安全通道)

    在这种情况下,您的客户端网站是不安全的,但您的 API 使用 HTTPS 协议是安全的,因此客户端网站与 API 之间的所有通信都将转换为加密方式,因此在传输过程中没有人可以中断数据。

    【讨论】: