我想为chrome创建一个SaaS扩展。
如果订阅不再是最新版本,我如何确保他们无法使用我的分机功能?
我的基本想法是,每当他们想要使用我的Chrome扩展程序的功能时,扩展程序会向我的服务器发出ajax请求,以检查今天的日期是否在我的数据库中订阅的结束日期之前。
扩展显然是基于客户端的,所以即使我在客户端有代码,只有在我的ajax请求返回它们有当前订阅时才会执行,但是一个有进取心的人不能只看我的代码并运行它通过控制台以超出我的ajax请求要求的方式?
有没有办法强制执行订阅?
编辑:
这主要是一个概念性问题,但我会更加清楚。
我的应用程序运行所需的所有javascript代码都在他们的本地计算机上,在他们的源文件中(为了工作它不需要访问我的数据库)。
所以你可以把我的代码放在他们的本地机器上看起来像这样:
if (usersSubscriptionIsCurrent) {
runFeature()
}
如果对我的服务器的Ajax请求返回其订阅是最新的,则usersSubscriptionIsCurrent为true。
有人仍然可以通过查看源代码然后在其控制台中键入runFeature()
来运行我的功能。
我想阻止它。
我的扩展程序依赖于将数据从扩展程序发送到相关的Chrome应用程序,因此我只想知道我也可以将数据发送到我的服务器,如果他们有当前数据,则可以将数据转发到用户的chrome应用程序订阅。但是哎呀。
我想的越多,我认为我可以预防的越少,但我想如果有人有聪明的想法,我会问。
答案 0 :(得分:1)
我认为你对什么算作SaaS有点困惑。 Wikipedia:
软件即服务是一种软件许可和交付模式,其中软件是基于订阅许可的,是集中托管的。用户通常通过网络浏览器使用瘦客户端访问SaaS。
强调我的。
如果您的应用/扩展程序包含所需的所有逻辑,则它不符合SaaS的条件。此外,由于始终可以复制/剖析您的应用程序,取消所有许可证检查,因此您无法保护它免受确定的攻击者的攻击。</ p>
通过模糊处理,将逻辑卸载到(P)NaCl模块,native host modules,或者像Alex Belozerov suggested一样,在某种程同样,所有这些都可以被坚定的攻击者打破。
但是如果您真的考虑到了SaaS(而不仅仅是基于订阅的许可),那么您的客户端应用应该是瘦客户端:也就是说,应该在服务器上处理您的应用逻辑,使用代码安全地远离客户端。这是保护它的唯一“确定”方式,但会给你带来处理成本,但这就是订阅应该首先涵盖的内容。
答案 1 :(得分:0)
也许最好的解决方案是在扩展一开始就检查他们的订阅是否是最新的,然后使用chrome management API卸载或禁用它,如果他们的订阅结束。
我喜欢听到更好的想法。
答案 2 :(得分:0)
您可以从服务器端获取所需的部分代码。因此,如果用户的订阅结束,他将无法运行您的功能,因为代码的一部分缺失。我的想法的概念:
var subscriptionStatusResponse = makeAjaxCall();
if(subscriptionStatusResponse.usersSubscriptionIsCurrent) {
runFeature_localCode(); // only part of functional
subscriptionStatusResponse.remoteCode(); // second part
}