FCM安全:阻止多个发件人将通知推送到所有设备?

时间:2017-04-20 15:33:17

标签: firebase push-notification firebase-cloud-messaging

作为我们解决方案的一部分,我们希望在每个客户站点部署FCM“应用服务器”。每个客户站点都有自己的用户使用我们的应用程序自己的设备。但是,我们希望确保如果其中一个客户站点遭到入侵,则攻击者无法滥用FCM“应用服务器”(例如,通过向所有客户站点的所有设备发送通知)。

我们正在考虑为每个客户站点生成唯一的服务器密钥,而不是在所有客户站点之间共享凭据。这样,如果一个客户站点遭到入侵,我们可以禁用该服务器密钥并停止发送更多FCM通知。

问题:我们可以确定攻击者无法向所有设备发送全局通知吗?

  • 假设攻击者拥有服务器密钥并访问一个客户站点“app-server”,他们是否可以获得所有已注册设备的列表?
  • 是否有发送到所有设备的默认通知“主题”? (例如/ topic / all或/ topic / global)。如果是,我们可以禁用该默认主题吗?

2 个答案:

答案 0 :(得分:2)

  

我们正在考虑为每个客户站点生成唯一的服务器密钥,而不是在所有客户站点之间共享凭据。这样,如果一个客户站点遭到入侵,我们可以禁用该服务器密钥并停止发送更多FCM通知。

如果通过“我们考虑为每个客户网站生成一个唯一的服务器密钥”,那么您只需为每个客户网站创建一个Firebase项目,那么我认为这是正确的方法

  

我们可以确定攻击者无法向所有设备发送全局通知吗?

应用可以通过实施getToken(authorizedEntity, scope)来接收来自其他发件人的邮件,这会为每个发件人生成不同的令牌。要否定此操作,您只需致电deleteToken(authorizedEntity, scope)my reference)。

这会使相应发件人的令牌无效(这是他们可能拥有的,并且应该是他们App Server上唯一的令牌),这会自动禁用它们以便向您的应用程序接收消息。

只要您能够从应用中删除它们作为有效的发件人,那么一切都很好。

  

假设攻击者拥有服务器密钥并访问一个客户站点“app-server”,他们是否可以获得所有已注册设备的列表?

这取决于App Server的实现方式。如果客户的App服务器仅用于发送消息,但令牌存储在其他地方,那么可能没有。没有API可以根据服务器密钥(see #1 here)检索服务器端的注册令牌。

  

是否有发送到所有设备的默认通知“主题”? (例如/ topic / all或/ topic / global)。如果是,我们可以禁用该默认主题吗?

没有。可以选择通过Firebase Notifications Console向特定应用程序发送通知,但如果应用程序未授权与该项目对应的发件人ID,则不会从中接收任何消息。我在发布之前已经测试过这种行为,所以我很肯定这是它的工作方式。

答案 1 :(得分:0)

无法将服务器密钥限制为仅允许某些主题/设备/等。

我会考虑使用Cloud Functions for Firebase以不同的方式解决这个问题。您可以构建一个HTTPS功能,该功能使用每个站点的授权令牌(以您认为合适的方式),然后该功能调用Firebase Cloud Messaging来实际发送推送通知。

通过这种方式,您可以完全控制"客户端可以发送的推送通知类型。网站,如果客户端网站遭到入侵,您不必担心级联安全问题。