如何在PHP软件上实现API密钥?

时间:2010-12-14 03:16:43

标签: php api key

我正在分发像Wordpress插件这样的PHP创建的插件,但是我想为它实现一个API密钥,用户需要输入一个API密钥来解锁它才能使它工作。

怎么办?是的,我已经知道它可以很容易地被绕过,因为PHP没有被编译,但至少它会阻止一些没有PHP知识的人。

谢谢..

4 个答案:

答案 0 :(得分:6)

我认为您不了解API密钥是什么。

API密钥是允许您或脚本访问API或在线服务并与之交互的密钥。

您似乎在描述的是某种许可证密钥,这会阻止用户在没有付款或注册的情况下操作您的脚本。

虽然API密钥经常 需要付款或注册,但这两者实际上并不是一回事。

API密钥通常用于跟踪使用情况,并防止滥用在线服务和数据。

在您的情况下,您似乎只是想限制对脚本的访问。

除非您的脚本对远程数据源有基本依赖性,否则此方法将无法工作,因为任何具有PHP远程知识的用户只会删除执行验证的代码。

使用PHP,同样适用于许可证密钥。用户将找到绕过它的方法,除非他们需要它来执行脚本。

验证必须远程执行,并且必须有一些动力让它保持原状(远程数据的访问是显而易见的)。

答案 1 :(得分:1)

您可以使用API​​密钥对实际源代码进行加密。加密源代码的一些重要部分(例如使用libmcrypt),并让脚本加载和解密源代码。当然,找到相关例程的人可以轻松地将源转储到磁盘并使用它,但它不会像删除支票那样微不足道。

答案 2 :(得分:0)

如果您不关心人们删除您的支票,那么您实际上只需要添加一个if语句来验证所配置的许可证密钥是否有效。

我注意到你提到你的许可证密钥只是SHA1哈希。您可以轻松地向哈希附加4个字符,您可以将其用作校验和。

例如:

function generate_key()
{
  $serial = sha1(uniqid(rand(), true));
  $checksum = substr(md5($serial), 0, 4);
  return $serial . $checksum;
}

function verify_key($key)
{
  $serial = substr($key, 0, 40);
  $checksum = substr($key, -4);
  return md5($serial, 0, 4) == $checksum;
}

这是一个非常简单的例子,但它只是教学。

基本上,您将验证许可证密钥在主机服务器上是否有效,而不是在服务器上ping脚本。

这样做的缺点是任何人都可以通过打开源代码并找到validate_key来生成有效密钥。

你可以让它调用外部脚本来执行verify_key,但这真的值得付出努力吗?此外,您将牺牲页面加载时间来验证密钥。

我记得vBulletin有一个非常容易破解的许可系统,但是他们在几个部分中有一个隐藏的1x1图像,这些图像在他们的域上ping了一个脚本。使用这些日志,他们能够确定哪些域名托管了他们软件的非法副本,他们只是向管理员发送了一封律师的信。

如果你想要一个更强大的解决方案,我建议可能会考虑Zend Guard,但你似乎并不关心人们如何亲自破解你的软件我会尽可能简单。

答案 3 :(得分:0)

它绝对毫无意义。作为它的php,您必须发送源代码,任何用户都可以删除许可证检查代码并运行它。

除非人们不喜欢弄乱许可证密钥,除非你的软件非常,非常有用,可取或必不可少,否则他们会找到许可证密钥免费替代品,或者只是不打扰它。