通过 HTTPS 提供单页面应用程序的必要性

Fel*_* D. 5 security ajax ssl https single-page-application

我目前正在开发一个单页应用程序,该应用程序与托管在不同服务器上并受 SSL 保护的 REST api 进行通信。

我想知道是否应该在为单页应用程序提供服务的服务器上设置 SSL 证书,或者只需在后端服务器上设置它就足够了,请考虑以下因素:

  1. 单页应用程序是重置密码链接的端点,查询字符串中带有机密令牌。这些链接通过电子邮件发送给我的用户。当用户单击链接时,他的浏览器会请求单页应用程序。因此,GET 请求和查询字符串均未加密。

  2. 然后,应用程序要求用户输入新密码,新密码通过 ajax 发送到受 SSL 保护的后端。

因此,我的看法是,值得为我的单页应用程序设置 SSL,以确保安全性,因为 GET 请求因此未加密,查询字符串也未加密,并且令牌是敏感信息。但是,如果只考虑第二个因素,则不需要这样做,因为单页应用程序和后端之间的连接是通过 SSL 完成的(因为单页应用程序使用 Ajax 与通过 SSL 保护的端点进行通信) 。

我对吗?还是完全走偏了?谢谢!

Max*_*ter 3

你的直觉是正确的。第一种情况和第二种情况之间的唯一有效区别在于,(1) 您将敏感信息(令牌)发送到前端服务器,(2) 您将敏感信息(密码)发送到后端服务器。因此,由于您要向两者发送敏感信息,因此它们都需要通过 SSL 进行保护。


如果前端服务器没有受到 SSL 保护,以下是可能的攻击途径:

  1. 当用户在查询字符串中发送重置令牌时,攻击者对前端服务器进行中间人攻击,攻击者获得对重置令牌的访问权限。

  2. 在真实客户端发送密码重置请求之前,攻击者将密码重置请求发送到后端服务器。

  3. 攻击者将新密码发送到后端服务器。密码被重置为攻击者知道的密码。

攻击者无需通过任何步骤破坏后端服务器的 SSL 即可对前端服务器实施此攻击。当然,后端服务器会接收用户的密码,因此也需要 SSL。简而言之,为了防止中间人攻击,您的两台服务器都需要 SSL。