【问题标题】:Unlock Premium Features in a Chrome Extension解锁 Chrome 扩展程序中的高级功能
【发布时间】:2014-01-14 14:32:27
【问题描述】:

我想在 Chrome 扩展程序中提供一些高级功能。我们的想法是,只要用户通过 PayPal 捐赠了一定金额,就可以使用后面的附加功能。

目前,我的策略如下:

1/.用户填写 PayPal 表单。

2/.提交表单时,会生成一个返回 URL,其中包含一些关键参数,例如用户 ID、请求时间、捐赠金额。一切都是通过base64编码的。例如:

var returnURL = 'https://subdomain.main.com/?params=';

// On Form Submission
function SubmitForm(type) {

    var paramURL = '?user=' + userID + '&time=' + now + '&type=' + ptype;

    // base64 encoding via btoa
    $('#donate [name=return]').val( returnURL + btoa(paramURL) );
    // Reday to submit form
    $('#PayPalForm').submit();

}

3/. Paypal 捐赠完成,用户被重定向到启用 https 的扩展网站的子域。

4/.在我的网站上,一些 PHP 代码会检查引荐来源网址(即用户是否来自 PayPal?),如果引荐来源网址看起来不错,它会解码 base64 字符串并获取参数(id、时间、类型...)。例如:

// Retrieve URL parameters
$paramURL = parse_url(base64_decode($_GET['a']));
parse_str($paramURL['query'], $query);

$id_user = $query['user']; // ID of the user
$time_req = $query['time']; // Time of request/donation
$type_req = $query['type']; // Type of Premium license w.r.t amount donated

5/.在这个阶段,我们的想法是创建一个新的 URL,指向我的 Chrome 扩展的选项页面,其中包含一些现有的和新的参数,其中的密钥用于解密用户安装时默认加密的部分代码扩展。我遇到的第一个问题是我希望找到一种方法来加密 PHP 中的这些参数,并能够在我的扩展程序中用 Javascript 解密它们。

我应该使用 PHP 和 JS 中可用的哪种对称加密/加密方法? AES256?在 JS 方面,我查看了 Crypto-JSSJCL 库。 PHP端,AES加密好像有点tricky...

6/.一旦用户返回扩展程序的选项页面并且 URL 参数被解码+解密,您将采取什么策略来解锁 Javascript 编写的扩展程序中的特定功能,以限制来自用户的作弊和搭便车,知道混淆是一个非常糟糕的选择。

【问题讨论】:

  • @Arian,扩展的主要功能是免费的。只是一些额外的功能需要大量的时间参与,而当前的货币化模型,即捐赠,在激励(imo)方面并不是最优的。我认为奖励系统让我最慷慨的用户能够使用更强大的扩展版本可能是一种有趣的方法。我可能错了:)
  • 啊,很好的回应,有道理!
  • 你最后做了什么?

标签: javascript php encryption google-chrome-extension


【解决方案1】:

您正在寻找的关键是您的贝宝按钮表单中的“自定义”属性。像这样:

<input id="customField" type="hidden" name="custom" value="SENT_FROM_addon_form">

如果您在 paypal developer 中创建了开发者按钮,并设置了验证 URL,则该自定义变量将显示在 PHP 中的 $_POST 中。

在此步骤中您不需要加密,因为 paypal 要求您使用自动加密的 https。但是,如果您确实想在纯服务器端使用加密,您应该查看crytpo.js

【讨论】:

    【解决方案2】:

    我们这样做(http://tipranks.com),

    我认为您在这里不需要任何加密。根本不要发送“加密”代码。

    只有在用户有权限的情况下才从服务器发送数据。

    您让用户登录一次,当他们这样做时,您获得了他们的权限作为回报,那么服务器只有在用户有权限的情况下才会返回数据。

    基本上 - 在这方面,扩展程序与任何网站没有什么不同。

    【讨论】:

    • 谢谢@Benjamin。是的,这是另一种方法。我想使用无数据库机制并保留原始扩展的大部分代码部分,但您的方法确实是最简单和最有效的。
    • @flo 它在实践中也有效。保留加密代码会在调试或从用户获取错误报告时引入巨大开销(行号等祝你好运) - 您确实需要保留订阅/用户列表并像您一样遵守最佳实践无论如何。
    【解决方案3】:

    Chrome Web Store program policies 明确禁止您描述的方法:

    恶意产品:

    [...] 尽可能在包中显示尽可能多的代码。如果您应用的某些逻辑被隐藏并且看起来可疑,我们可能会将其移除。

    您需要找出另一种通过扩展程序获利的方法。例如,如果您的扩展程序依赖于您运营的网络服务,您可能需要考虑要求订阅才能使用该服务。

    【讨论】:

    • 这并不可疑。他正试图通过他的合法应用获利。了解相关人员 - 他们不会仅仅为此而删除它。
    • 加密的代码将是可疑的读者,因为没有解密密钥就不可能知道它对浏览器做了什么。
    【解决方案4】:

    我认为您无法有效地在扩展程序中锁定高级功能。任何人都可以使用浏览器开发者控制台注入 js 代码来轻松解锁。

    如果您的扩展程序的主要功能在于弹出窗口,那么您可以使用 iframe,在此 iframe 中,您可以调用 php 代码,在呈现 UI 之前执行所有预处理(以锁定/解锁高级功能)。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多