使用PHP验证文件是否遭到篡改,比如WordPress主题防盗版

因为最近在帮朋友写一个WP的插件授权功能,验证逻辑很简单,就是用 file_get_contents() 比对文件就好了。

稍微改了一下就可以验证主题模板的文件是否完整了。


//我先随便找个地方宣布个全局参数
global $type_key;

//如果从远端验证 
$type_key = get_data();
//如果从本地验证
//$type_key = 'www.yeraph.com';
//curl获取验证信息,这里假设接口返回的是一段text格式文本'www.yeraph.com'
function get_data(){
    //验证接口的地址
    $url = 'https://api.yeraph.com/info';
    //创建一个curl会话
    $info = curl_init();
    //配置curl参数
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
    //加载需要访问的url
    curl_setopt($info,CURLOPT_URL,$url);
    //返回获取的内容
    $output = curl_exec($info);
    return $output;
    //关闭curl会话防止出错
    curl_close($info);
}

//再随便找个地方加载验证函数
function type_data(){
    global $type_key;
    //需要验证的文件,这里是加载了主题的index文件
    $type_file = ''.get_template_directory().'/index.php';
    //加载这个文件
    $file_data = file_get_contents($type_file);
    //比对文件内容,如果文件中不包含文本 www.yeraph.com ,就
    if (strstr($file_data, $type_key) == false){
        //die就完事了
        die('寄了'); 
    }else{
        return('');
    }
}

//再再随便找个地方运行函数
type_data();

如果验证失败,进程就直接“寄了”。

get_template_directory()是WP自带的一个函数,会直接返回主题的绝对路径(但是这个路径是不输出 / 的)。

curl_setopt()是curl的配置函数,支持的功能很多,比如ssl验证的。

如果真要用的话用base64_encode()之类的把必要的参数保护起来,省得被直接搜索出来。

因为这里没打算写验证接口的逻辑,直接假设我这个接口返回的是一段text格式文本,真要用的时候验证逻辑自己考虑嗷。

感觉这个逻辑用处很多,可以验证文件hash、验证授权、验证版权文本、之类的,函数放置的位置越诡异,防盗效果越好。

每天一点制造屎山小技巧。

感觉我好像莫名其妙的琢磨明白了大部分主题的授权逻辑呢。

另外别问我为什么2202年还在写PHP,问就是我菜比。

THE END
夜华子酱我知道你很急,但你先别急