2015-01-15 47 views
0

我想为Chrome创建SaaS扩展。为基于客户端的应用程序实施Saas订阅要求

如何确保他们的订阅不再是最新版本时不能使用我的扩展功能?

我的基本想法是,只要他们想使用我的Chrome扩展的功能,扩展会向我的服务器发出ajax请求,以检查当前日期是否在我的数据库中的订阅结束日期之前。

该扩展显然是基于客户端的,所以即使我的客户端只有在我的ajax请求返回它们有当前订阅的情况下才会执行代码,那么无法让一个有进取心的人只看我的代码并运行它通过控制台以超过我的ajax请求要求的方式?

有没有办法强制订阅?

编辑:

这主要是一个概念上的问题,但我会尽力再清楚不过了。

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

,所以你可以对本机认为我的代码看起来像这样:

if (usersSubscriptionIsCurrent) { 
    runFeature() 
} 

如果Ajax请求到我的服务器返回他们的订阅是当前usersSubscriptionIsCurrent是真实的。

只要查看源代码,然后在其控制台中输入runFeature(),某人仍然可以运行我的功能。

我想阻止这种情况。

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

我越想越想越少,我认为可以预防,但我想我会问,如果有人有一个聪明的想法。

+0

你能附上一些关于这个问题的相关代码吗?编辑 – gui47 2015-01-15 22:23:12

+0

,希望更清楚 – markain 2015-01-16 18:11:36

+0

您的扩展需要付费吗?以下是对您的问题的参考。您可以在用户模型上追踪“subscription_active”布尔或类似内容。当用户登录时,您可以检查API以查看用户订阅的状态。要看:http://stackoverflow.com/questions/18085777/what-is-the-best-way-to-prevent-user-from-using-saas-app-after-failed-payment – gui47 2015-01-16 22:35:16

回答

1

我觉得你对什么是SaaS有些困惑。 Wikipedia

软件即服务是一种软件许可和交付模式,即软件许可订阅基础上被集中托管。用户通常通过网页浏览器使用瘦客户端访问SaaS。

强调我的。

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

有保护你的代码在一定程度上的方式,通过模糊处理,卸载逻辑(P)NaCl模块,native host modules,或者像亚历克斯Belozerov suggested,加载上运行的代码。再一次,所有这些都可以被坚定的攻击者打破。

但是,如果你真的有心灵的SaaS(而不是仅仅基于订阅的许可),您的客户端应用程序应该是一个瘦客户端:也就是说,你的应用程序逻辑应该在服务器上进行处理,用代码安全离开来自客户。这是保护它的唯一“可靠”方式,但是会给您带来处理成本,但订阅本来应该涵盖这一点。

+0

我确实有一个基于订阅的服务,但你说得对,我想我的不算是SaaS。在我个人的情况下,将逻辑卸载到我的服务器并不能真正帮助我,所以我需要进行调整。谢谢你 – markain 2015-01-18 22:26:14

0

也许最好的解决方案是在扩展开始时检查它们的订阅是否是最新的,然后在订阅结束时使用chrome management API来卸载或禁用它。

虽然我很乐意听到更好的想法。

+0

例如,这不会阻止非常非常确定的攻击者在订阅仍然有效时从Chrome配置文件复制源代码,对其进行修改并将其解压缩。请注意,最近Chrome开始阻止对店铺安装商品进行本地修改,但 – Xan 2015-01-17 12:08:14

+0

因此它可能有效,可能不会?你有链接到他们谈论阻止本地修改的地方吗?应该有办法隐藏代码吗?否则任何Chrome浏览器应用程序或扩展程序都可能被其他人复制并出售(忽略版权法......) – markain 2015-01-17 17:08:59

+0

是的,您可以随时复制代码。对于SaaS,您唯一的解决方案是将逻辑卸载到服务器。我没有链接,但Chrome强制CRX安装扩展上的文件散列作为恶意软件保护 - 如果您编辑安装的扩展中的文件,它将被禁用。但是你可以复制它并以解压的方式加载。 – Xan 2015-01-17 17:21:09

0

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

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

可能,但最有可能不明智。请参阅http://stackoverflow.com/questions/11471753/pass-javascript-function-in-ajax-response – markain 2015-01-17 09:10:31

+0

他们也可以检查网络选项卡并将其复制以供以后使用。 – markain 2015-01-17 17:14:18