我目前正在处理单页应用程序,该应用程序与托管在不同服务器上并使用SSL保护的REST api进行通信。
我想知道是否应该在服务于单页应用程序的服务器上设置SSL证书,或者只是在后端服务器上设置它就足够了,考虑以下因素:
单页面应用程序是重置密码链接的端点,在查询字符串中包含机密令牌。这些链接通过电子邮件发送给我的用户。当用户点击链接时,他的浏览器会请求单页面应用程序。因此,GET请求未加密,查询字符串也不加密。
该应用程序然后要求用户输入新密码,这个新密码通过ajax发送到后端,后端受SSL保护。
所以我认为值得为我的单页应用程序设置SSL,以确保第一个考虑因素的安全性,因为GET请求因此未加密,查询字符串也不是敏感的信息。但是,如果仅考虑第二个考虑因素,则不需要它,因为单页面应用程序和后端之间的连接是通过SSL完成的(因为单页面应用程序使用Ajax与受保护的端点进行通信) SSL)。
我是对的吗?还是完全偏离了?谢谢!
答案 0 :(得分:3)
你的直觉是正确的。第一种和第二种情况之间唯一有效的区别在于:(1)您将敏感信息(令牌)发送到前端服务器,(2)您正在向后端服务器发送敏感信息(密码)。因此,因为您向两者发送敏感信息,所以它们都需要通过SSL保护。
如果前端服务器不受SSL保护,则可能是攻击途径:
攻击者在用户在查询字符串中发送重置令牌时MITM前端服务器,攻击者可以访问重置令牌。
在真实客户端发送密码重置请求之前,攻击者会将密码重置请求发送到后端服务器。
攻击者将新密码发送到后端服务器。密码重置为攻击者知道的密码。
攻击者无需牺牲后端服务器的SSL就可以在前端服务器上解除此攻击。当然后端服务器将从用户接收密码,因此它也需要SSL。简而言之,为了防止中间人攻击,您需要为两台服务器提供SSL。