我想在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,time,type ...)。例如:
// 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 /。在此阶段,我们的想法是创建一个指向Chrome扩展程序的选项页面的新网址,其中包含一些现有参数和新参数,其中包含解密部分代码的密钥,默认情况下,当用户安装时扩展即可。我遇到的第一个问题是,我希望找到一种方法来加密PHP中的这些参数,并能够在我的扩展中的Javascript中解密它们。
我应该使用PHP和JS中可用的哪种对称加密/加密方法? AES256?在JS方面,我查看了Crypto-JS和SJCL库。在PHP方面,AES加密似乎有点tricky ...
6 /。一旦用户返回到扩展程序的选项页面并且URL参数被解码+解密,那么在Javascript编写的扩展中解锁特定功能的策略是什么,以限制来自用户的作弊和搭便车,知道混淆是一个非常糟糕的选择。
答案 0 :(得分:1)
我们这样做(http://tipranks.com),
我认为你不需要加密。不要发送'加密'代码。
如果用户有权限,则仅从服务器发送数据。
您让用户一旦登录,当他们获得他们的权限作为回报时,如果用户有权限,则服务器仅返回数据。
基本上 - 在这方面,扩展与任何网站都没有区别。
答案 1 :(得分:1)
您要查找的键是贝宝按钮表单中的“自定义”属性。像这样:
<input id="customField" type="hidden" name="custom" value="SENT_FROM_addon_form">
如果您已经在paypal开发人员中创建了开发人员按钮,并设置了验证URL,则该自定义变量将显示在PHP的$ _POST中。
在此步骤中,您不需要加密,因为Paypal要求您使用自动加密的https。但是,如果您确实想仅在服务器端使用加密,则应签出crytpo.js
答案 2 :(得分:0)
Chrome Web Store program policies明确禁止您所描述的方法:
恶意产品:
[...]尽可能在包中尽可能多地显示您的代码。如果您的某些应用逻辑被隐藏且看起来很可疑,我们可能会将其删除。
您需要找出另一种通过您的扩展获利的方式。例如,如果您的扩展程序依赖于您运营的Web服务,则可能需要考虑要求订阅才能使用该服务。
答案 3 :(得分:0)
我认为您无法有效地锁定扩展程序中的高级功能。任何人都可以使用浏览器开发者控制台注入 js 代码来轻松解锁。
如果您的扩展程序的主要功能在于弹出窗口,那么您可以使用 iframe,并且在此 iframe 中,您可以调用 php 代码,在呈现 UI 之前执行所有预处理(以锁定/解锁高级功能)。< /p>