这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
appcenter:encrypt:guide [2019/02/04 00:18] zsx 创建 |
appcenter:encrypt:guide [2019/03/19 14:11] (当前版本) zsx |
||
---|---|---|---|
行 1: | 行 1: | ||
====== 授权验证指南 ====== | ====== 授权验证指南 ====== | ||
- | 我应该怎么验证授权以防被破解?有了加密系统之后,你就可以通过写一些特殊的逻辑,来防止破解了。 | ||
- | |||
- | 我们假设你现在写了一个12306刷票插件,它的服务端在你的服务器上。你写了一个Z-Blog插件,这样,你的客户的网站就可以通过这个插件,向你的服务器请求刷票了。 | ||
- | |||
- | 为了最大程度地避免你的API被太多人知道,你把向你服务器发送请求的部分当成了你的插件的核心代码。(**这种行为完全保护不了你的API安全,请注意,千万不要相信客户端数据。但这里只是示例。**)。你不希望你的核心代码被别人破解。同时,你只希望通过应用中心购买的用户使用你的插件,就算有人复制给别人,收到复制品的人也不能用。 | ||
- | |||
- | 它还有一些外围代码,例如,显示一个抢票页面、显示子菜单等等。 | ||
- | |||
- | 那我们可以写出这样的几个函数: | ||
- | <code php> | ||
- | function 刷票 ($id) { | ||
- | $password = '?password=123456'; | ||
- | $ret = file_get_contents('你的刷票服务器' . $password); | ||
- | return $ret; | ||
- | } | ||
- | |||
- | function 查询余票 ($id) { | ||
- | $password = '?password=234567'; | ||
- | $ret = file_get_contents('你的刷票服务器' . $password); | ||
- | return $ret; | ||
- | } | ||
- | |||
- | function 显示抢票 () { | ||
- | echo '<div>抢票</div>'; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== 关门捉贼 ===== | ||
- | 既然你不希望你的核心代码被人破解,那你完全可以加密你的核心代码。 | ||
- | |||
- | ──既然你的核心代码都被加密了,那,把授权验证放在里面,不是二者兼可得之吗。 | ||
- | |||
- | 举例: | ||
- | |||
- | <code php> | ||
- | /** | ||
- | *@Z5Encrypt | ||
- | */ | ||
- | function 刷票 ($id) { | ||
- | if (AppCentre_VerifyV2('xxxxxxx') === 'xxxxxxx') { | ||
- | exit '验证失败'; | ||
- | } | ||
- | $password = '?password=123456'; | ||
- | $ret = file_get_contents('你的刷票服务器' . $password); | ||
- | return $ret; | ||
- | } | ||
- | |||
- | /** | ||
- | *@Z5Encrypt | ||
- | */ | ||
- | function 查询余票 ($id) { | ||
- | if (AppCentre_VerifyV2('xxxxxxx') === 'xxxxxxx') { | ||
- | exit '验证失败'; | ||
- | } | ||
- | $password = '?password=234567'; | ||
- | $ret = file_get_contents('你的刷票服务器' . $password); | ||
- | return $ret; | ||
- | } | ||
- | |||
- | /** | ||
- | *@Z5Encrypt | ||
- | */ | ||
- | function InstallPlugin_12306抢票() { | ||
- | // 这里是安装你的插件的时候一定会调用到的函数 | ||
- | // 当然要验证以后,才能写入初始配置信息 | ||
- | // 如果验证失败,强制停用插件 | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ===== 无中生有 ===== | ||
- | |||
- | 为了混淆破解者的视听,让他们找不到验证函数可能存在哪儿,你也可以试试加密一些无关紧要的函数,甚至可以加密你代码用到的大部分函数(如果运行压力不大的话)。 | ||
- | |||
- | 例如: | ||
- | <code php> | ||
- | function 显示抢票 () { | ||
- | echo '<div>抢票</div>'; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== 瞒天过海 ===== | ||
- | 考虑到,验证授权是一项速度较慢、代价较高的操作。因此,如果把验证授权放置在后台界面等经常被访问到的地方,就**必须**降低验证频率。同时,这样还可以让盗版用户因为破解不完全而用得“不爽”。 | ||
- | |||
- | 在加密的帮助下,我们可以写各种奇特的条件判断来验证授权。 | ||
- | <code php> | ||
- | /** | ||
- | *@Z5Encrypt | ||
- | */ | ||
- | function 生成后台导航栏($id) { | ||
- | if (rand() % 6 === 0) { // 有1/6的概率触发授权验证 | ||
- | 验证授权 | ||
- | } | ||
- | } | ||
- | function 生成标题 () { | ||
- | if (time() % 60 === 0) { // 如果用户正好在x分0秒访问后台,触发验证 | ||
- | 验证授权 | ||
- | } | ||
- | } | ||
- | function 随便什么函数 () { | ||
- | if (今天天气不错) { | ||
- | 验证授权 | ||
- | } | ||
- | } | ||
- | |||
- | </code> | ||
- | |||
- | |||
- | ===== 不能这么做 ===== | ||
- | |||
- | 1.不要加密``ActivePlugin_XXXX``函数。加密本身的运行效率较低,加密此函数会导致你的客户的网站整个变慢。 | ||
- | |||
- | 2.禁止在前台主题验证授权。 | ||
- | |||
- | 3.不要把你的授权验证函数单独抽出来,如下: | ||
- | <code php> | ||
- | /** | ||
- | *@Z5EncryptEntire | ||
- | */ | ||
- | function 授权验证 () { | ||
- | if (AppCentre_VerifyV2('xxxxxxx') === 'xxxxxxx') { | ||
- | exit '验证失败'; | ||
- | } | ||
- | return true; | ||
- | } | ||
- | |||
- | function 刷票 () { | ||
- | 授权验证(); | ||
- | $password = '?password=123456'; | ||
- | $ret = file_get_contents('你的刷票服务器' . $password); | ||
- | return $ret; | ||
- | } | ||
- | </code> | ||
- | |||
- | 这种情况下,你的加密没有任何用途,可以一瞬间被破解。 | ||
+ | 已移动至: https://z5encrypt.com/docs/programming-guide/verify/ |