2015-01-15 92 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