【问题标题】:Enforcing Saas subscription requirements for client based apps对基于客户端的应用程序实施 Saas 订阅要求
【发布时间】:2015-03-14 04:42:39
【问题描述】:

我想为 chrome 创建一个 SaaS 扩展。

当他们的订阅不再是最新的时,我如何确保他们不能使用我的扩展程序的功能?

我的基本想法是,每当他们想使用我的 chrome 扩展程序的功能时,该扩展程序都会向我的服务器发出 ajax 请求,以检查今天的日期是否早于我数据库中订阅的结束日期。

扩展显然是基于客户端的,所以即使我在客户端有代码,只有当我的 ajax 请求返回他们有当前订阅时才会执行,但有进取心的人不能只看我的代码并运行它通过控制台以超出我的 ajax 请求要求的方式?

有没有办法强制订阅?

编辑:

这主要是一个概念性问题,但我会尽量清楚。

我的应用程序运行所需的所有 javascript 代码都在他们的本地机器上,在他们的源文件中(它不需要访问我的数据库)。

所以你可以把我在他们本地机器上的代码想象成这样:

if (usersSubscriptionIsCurrent) {
  runFeature()
}

如果对我的服务器的 Ajax 请求返回他们的订阅是最新的,则 usersSubscriptionIsCurrent 为 true。

仍然可以通过查看源代码,然后在他们的控制台中输入runFeature() 来运行我的功能。

我想阻止这种情况。

我的扩展程序依赖于将数据从扩展程序发送到相关的 chrome 应用程序,所以我只是想到我也可以将数据发送到我的服务器,然后服务器可以将数据转发到用户的 chrome 应用程序,如果他们有当前订阅。但是哎呀。

我想得越多,我就越觉得我无法阻止,但我想我会问一下,以防有人有聪明的主意。

【问题讨论】:

  • 能否附上一些关于这个问题的相关代码?
  • 已编辑,希望更清楚
  • 您的分机需要付费吗?这是对您的问题的参考。您可以在 User 模型上跟踪“subscription_active”布尔值或类似值。当用户登录时,您可以检查 API 以查看用户订阅的状态。看:stackoverflow.com/questions/18085777/…
  • 我的意思是,即使 API 说他们的订阅已经结束,他们也可以查看我的扩展源代码,找到他们想要运行的功能,然后通过控制台运行它,绕过我的订阅检查.
  • 如果应用程序运行所需的所有 javascript 文件都在用户的本地计算机上,我不知道你可以阻止他们在本地文件上执行此操作。

标签: google-chrome-extension saas


【解决方案1】:

我认为您对什么是 SaaS 有点困惑。 Wikipedia:

软件即服务是一种软件许可和交付模式,其中软件以订阅方式获得许可,并且集中托管。 SaaS 通常由用户使用瘦客户端通过网络浏览器访问。

强调我的。

如果您的应用程序/扩展程序包含所需的所有逻辑,则它不符合 SaaS 条件。此外,由于始终可以复制/剖析您的应用程序,取消所有许可证检查,因此您无法保护它免受坚定的攻击者的攻击。

有一些方法可以在一定程度上保护您的代码,例如通过混淆、将逻辑卸载到 (P)NaCl 模块、native host modules,或者像 Alex Belozerov suggested 那样在运行时加载代码。同样,所有这些都可以被坚定的攻击者打破。

但如果您真的考虑到 SaaS(而不仅仅是基于订阅的许可),您的客户端应用程序应该是一个瘦客户端:也就是说,您的应用程序逻辑应该在服务器上处理,代码安全地远离客户。这是保护它的唯一“可靠”方式,但会产生处理费用,但这是订阅首先应该涵盖的内容。

【讨论】:

  • 我确实考虑过基于订阅的服务,但你说得对,我猜我的不算作 SaaS。就我个人而言,将逻辑卸载到我的服务器并没有真正帮助我,所以我需要调整。谢谢 Xan
【解决方案2】:

您可以从服务器端获取所需的部分代码。因此,如果用户的订阅结束,他将不会因为缺少部分代码而运行您的功能。我的想法的概念:

var subscriptionStatusResponse = makeAjaxCall();
if(subscriptionStatusResponse.usersSubscriptionIsCurrent) {
   runFeature_localCode();                  // only part of functional
   subscriptionStatusResponse.remoteCode(); // second part
}

【讨论】:

【解决方案3】:

也许最好的解决方案是在扩展程序启动后立即检查他们的订阅是否是最新的,然后在他们的订阅结束时使用chrome management API 卸载或禁用它。

不过,我很想听听更好的想法。

【讨论】:

  • 这不会阻止一个非常非常坚定的攻击者在订阅仍然有效时从 Chrome 配置文件中复制源,修改它,然后将其解包加载。请注意,最近 Chrome 开始阻止对商店安装的项目进行本地修改
  • 所以它可能有效,也可能无效?你有链接到他们谈论阻止本地修改的地方吗?应该有办法隐藏代码吧?否则任何 chrome 应用程序或扩展程序都可能被其他任何人复制和出售(忽略版权法......)
  • 是的,您可以随时复制代码。对于 SaaS,您唯一的解决方案是将逻辑卸载到服务器。我没有链接,但 Chrome 会在 CRX 安装的扩展程序上强制执行文件哈希作为恶意软件保护 - 如果您在已安装的扩展程序中编辑文件,它将被禁用。但是你可以复制它并以解压的形式加载。
  • P.S.:这是我学到的地方,但我没有 Chrome 开发者博客链接来确认:github.com/cezarsa/silver_bird/issues/427
  • 很公平。感谢您的链接,它确实有帮助。
猜你喜欢
  • 2020-07-06
  • 2020-01-24
  • 2019-11-18
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多