Loading...

自己写的PHP代码授权验证系统

也许你写过一些 php 的网页,是专门为某人定制的,你想除了他以外不允许其他人使用,那么代码安全就很重要了。

众所周知,PHP 代码即使加密了也不是很安全,解密起来也非常轻松,国内有很多在线解密平台,效率都挺高的,价格参差不齐。

于是我想了个代码授权的新思路:如果脚本里根本没有真正的代码呢?

就是这样的,这里是一个 Licence.php 的代码文件,混淆加密过的,你可以下载下来看,也可以尝试解密,解密后并不会得到什么有用的内容,里面不过是一个加密解密类和网络请求类。

第一次运行这个脚本会抛出 LicenceNotFoundException 异常,并且会在当前目录下产生一个 licence.cfg 文件,里面是 json 格式的内容。

{“key”:”put your key here”,”type”:”https”,”host”:”www.natfrp.org”,”path”:”\/core\/api.php”}

其中的参数分别代表:

Key:密钥,即激活码或者授权码

Type:网络协议类型,http 或者 https

Host:验证服务器主机名

Path:授权 API 地址

修改 put your key here 这几个字,改为你的 Key,此处提供一个测试 Key:

NicoNicoNicoNico

输入这个 Key 之后,保存,再次运行 Licence.php 将会出现如下效果

那么来说一下这个授权系统的好处和坏处,好处有:

  • 代码并非储存在本地文件里,通过解密是不可能获取源代码的
  • 你的 KEY 就是用来解密服务端返回内容的 AES 密钥,没有 KEY 或者错误的 KEY 是无法解密内容的
  • 云端可随时修改代码,同步更新,而不需要手动修改客户端代码
  • 可以根据不同的授权码分配不同的代码内容,更灵活
  • 服务器可根据客户端请求的 IP 地址选择是否返回代码,防止倒卖

坏处也有:

  • 每一次请求都会访问一次授权服务器,开销较大,要求授权服务器并发性能高
  • 使用动态执行代码,效率较低,性能损耗较大

服务端代码的简单例子:

<?php
include ("sakura.encrypt.class.php");
if (preg_match("/^[A-Za-z0-9\-\_]+$/", $_GET['key'])) {
    $SakuraEncrypt = new SakuraEncrypt();
    $SakuraEncrypt->set_key($_GET['key']);
    $SakuraEncrypt->require_pkcs5();
    switch ($_GET['key']) {
        case "NicoNicoNicoNico":
            $data = json_encode(Array('status' => 200, 'content' => 'echo "Hello World";'));
            echo $SakuraEncrypt->encrypt($data);
        break;
        default:
            $data = json_encode(Array('status' => 404));
            echo $SakuraEncrypt->encrypt($data);
    }
} else {
    echo "Invalid Key";
}

附上加密类文件:sakura.encrypt.class.php

使用本系统需要开启 PHP 的 OpenSSL 模块。

教程完结 —— 有不懂的地方或者发现 BUG 欢迎在评论区反馈。

一条评论

  • ifatbee

    2018年5月30日

    sakura.encrypt.class.php Licence.php 能公开给大家学习吗,谢谢。

    Reply

发表评论

》表情