如何保护我的插件,以便付费用户只能使用它?

时间:2010-10-21 13:19:13

标签: php wordpress code-access-security api-key

我正在开发一些(wordpress)插件,我打算为想要使用它的人收取许可费。

因此我需要一种方法来确保此插件不会上传到任何人都可以下载并免费使用的服务器。

所以我在考虑使用API​​密钥。有效的API密钥=用户可以使用该插件。无效的=插件不起作用。

我看过这篇文章PHP API Key Generator,但我对此并不了解。

我也知道,因为它是PHP,任何人都可以进入代码并禁用API检查(我只是在猜测)

保护插件的最佳方法是什么? API密钥?其他方法?有没有人有关于这个主题的任何好的教程的链接?

5 个答案:

答案 0 :(得分:15)

我的插件依赖于与您自己的服务器的互动,API密钥是阻止非付费用户使用它的绝佳方法。
但是,如果它不需要与您的服务器交互,那么任何知道PHP知识的人都可以修改您的插件以删除API密钥检查。

这里的一个主要问题是您的插件的许可。 WordPress是GPL,GPL有一个条款要求“衍生作品”也要根据GPL许可。 (这是轻描淡写的:实际上,整个GPL都是基于该条款,如果没有它,就不会真正有效。)
关于插件是否可以被视为“衍生作品”存在很多争论。在我看来,它不是,我认为试图强迫它被视为一个是不道德的。然而,核心WordPress开发者Automattic和自由软件基金会(编写GPL的组织)声称WordPress插件在法律上有义务使用GPL,并且可能不会使用其他许可证。
到目前为止还没有法院案件,因此没有先例,但是围绕一些不使用GPL的主要WordPress插件存在相当大的敌意,而Automattic基本上威胁到法律诉讼,而插件开发者已经说“请起诉我”。不完全是一个漂亮的情况,而且我会说,无论情况的道德如何,负面宣传通常都会超过封闭式采购插件的好处。

总结一下:你的插件基本上必须是GPL,这意味着你必须提供未加密的源代码,所以任何人都可以修改你的插件来删除你添加的任何限制。但是你应该很容易让大多数潜在客户想要从你那里购买插件而不是使用分叉版本 - 你可以提供诸如支持,升级等等可能无法获得的好处。 “破解”版本。

有几家公司成功销售插件,根据GPL并且没有保护(API密钥等)。即使任何人都可以理论只是下载插件并将其上传到任何人都可以下载的公共站点,在实践中没有人想要使用非官方版本赢得'为新版本的WordPress进行更新。因此,即使没有任何形式的保护,销售插件似乎也是一种可行的商业模式。

当然,所有这些都假设有人不只是分叉你的插件并带着pon单独维护代码库。你无能为力 - 但不太可能发生。

对于它的价值,如果你想为那些决定重新发布你的插件的人努力工作,你可能会考虑以下几点:
- 即使插件本身是开源的,您仍可以使用插件名称声明商标权,因此您可以合法地阻止他们使用您的客户知道的相同名称 - 只有插件中的PHP代码必须是GPL' - 您可以分发任何不包含PHP的文件,这些文件在单独的许可下与WordPress交互以禁止重新分发。例如,CSS,JavaScript和图像不必属于GPL。

答案 1 :(得分:5)

这里可以找到一篇很棒的文章,虽然这并不包括在你进一步追求这条路线之前想到的技术 http://www.littlehart.net/atthekeyboard/2007/07/20/protecting-your-php-code/

虽然为了更直接地回答您的问题,但是使用API​​密钥系统,然后使用Zend Guard的内容对您的PHP进行编码,这样用户就不能直接进入并删除API密钥检查作为代码编码。

答案 2 :(得分:4)

使用API​​密钥可能没问题。您不必担心人们盗用您的插件,因为无论您做什么都会发生。有权删除您的API检查的人非常聪明,可以删除您在脚本中添加的任何类型的保护。你不能担心这些人。

使用像Zend Guard这样的产品不是一种选择。它要求最终用户在其系统上安装Zend Optimizer,而您无法保证。

所有这一切,无论如何都不能混淆或隐藏您的源代码。 Wordpress根据GPL许可证授权,他们严格禁止插件获得任何其他许可。虽然您可以销售该插件,但您无法隐藏源代码。

答案 3 :(得分:0)

说实话,我不认为有一个防弹措施可以避免你的插件变得无效,看看WProbot,他们有一个非常可靠的方法来验证许可,但仍有数百个无效版本。

只要人们不得不下载你的代码,有人会亲自动手并取而代之,你可以做的就是提供像s2member和AllinOneSEO这样的免费版本。

答案 4 :(得分:0)

我真的在想这些。 但它是GPL,我们无法隐藏我们的代码。 我认为,我们必须做更复杂的阅读api密钥系统。我想这样做。但有一种方法可以解决这个问题,如果它是开源的话,删除if else系统是不幸的。您可以查看以下示例: PHP AES encrypt / decrypt