it-swarm.cn

安全的WordPress付费插件

我想创建一个WordPress插件,但也想确保插件只能在使用对每个域唯一的串行密钥激活之后使用。

假设:最好的方法是什么:

  1. 我必须向用户提供实际的源代码,并且不能使用VideoPress类型的安全性 - 这只是来自插件服务器的实际内容的JavaScript包装器。
  2. 我想确保一个平均PHP开发人员的新手不能轻易地破坏安全性。
5
Adhip Gupta

选项1 - 处理系统上的一些数据

我不会将所有插件的处理放在您自己的服务器上,而是选择一个或两个重要的功能并将它们保存在您的系统上。然后,需要为使用该插件的每个站点提供API密钥,以便它们可以与您的服务器通信。

选项2 - 加密存储的数据并需要托管的解密密钥

另一个替代方案是基本的加密设置 - 这实际上是我已经玩了一段时间的系统,我只是没有费心去任何地方部署它。代码本身(保持对GPL的忠诚度)就像你期望的那样是纯文本。但是,所有存储的数据(默认值,插件设置等)在保存到数据库之前都已加密。这里的技巧是远程系统上的插件没有解密密钥 - 为了解密数据,它必须将其API密钥发布到您的系统,然后系统会使用解密密钥进行响应。然后可以在刷新之前将其存储在瞬态(临时选项)中一段时间​​ - 这样在繁忙的流量期间,您没有每2秒就有一个站点命中您的服务器。

这种方法的缺点可能超过了好处(这就是为什么我还没有在任何地方部署它)。首先,精明的程序员可以捕获解密密钥,然后他们不再需要你的服务器了。或者他们可以只清除所有加密/解密挂钩并以纯文本格式运行。这对于用户来说是开源的优势,对于想要分发免费但受限制的系统的开发者来说是不利的。

另一个缺点是对服务器的依赖。在瞬态中存储密钥可以减轻服务器的负担......但如果您的站点停机一两个小时,那么每个站点都使用您的插件除非你计划某种优雅的停用,否则会停机一两个小时。此外,这意味着如果人们继续使用您的系统,您必须无限期地保持所述服务器正常运行。

选项3 - 限制“免费”版本的功能

最后一个选项,以及我正在积极使用的选项,是拆分插件的功能集和功能。系统的核心(用户界面,基本功能等)无需注册即可免费使用。对于更高级的功能,用户必须注册其副本,获取激活密钥,然后将该密钥输入UI以完成该过程 - 然后插件将与您的服务器进行验证并向系统下载额外的高级“附加组件” 。

这里的缺点是,一旦下载,所有代码现在都在用户的网站上,并且在GPL下,他们仍然可以重新分发完整的包。优点是它只依赖于您的系统一次,并且不需要任何类型的长期下载/处理支持。


无论您决定继续前进,您都要在服务器上维护某种外部API,或者为用户提供完整的系统源。如果您在系统上保留一些功能,则几乎必须保证100%的正常运行时间才能使其值得。如果您要提供完整的来源,则无法(在GPL下)阻止其他人重新分发您的系统。

4
EAMann

您不能将源代码隐藏在WordPress用户之外,也不允许您因为许可问题而限制插件的重新分发。

你正在用你的插件创建一个WordPress派生,你的用户有权获得它的来源并自由地重新发布它(参见 自由软件中的四个自由 )。

假设WordPress根据GPLv2获得许可并且您拥有非美国客户,则应该处理您在(“受保护”)产品中可能存在的GPL违规行为的影响。

您正在尝试为您的用户实施供应商锁定。

3
hakre

拥有安全许可证的分布式插件的唯一方法就是在你自己的服务器上运行插件的主要功能,比如Akismet。用户必须向服务器发送包含其许可证密钥的请求。如果密钥签出,请执行结束时的源代码并将结果发回。

2
John P Bloch