网络验证:【原创】利用WordPress + Zibll(本站)用户信息验证APP用户会员

引言

前两天突然想给自己某些个APP或者各种小程序加个使用门槛(想恰烂钱了),找了一天的免费网络验证,易如意,U验证这些拿来搭建,使用的效果都不理想(白嫖失败),达不到自己的要求:一账号多APP使用,方便注册和可充值的会员系统。猛然想到自己的博客站不就有这样的功能吗?

于是废话不多说直接就开写。

正文

查询信息

首先尝试登陆后,拿token通过请求方式到用户页面获取,结果啥都没有(不知道是不是我太菜了),只有找到了用户名、昵称、邮箱、注册时间等信息(对我来说没有太大用)

看来会员信息不是那么容易找到直接扒数据库,看来就是这了:

写查询语句:

SELECT * FROM wp_users LEFT JOIN (SELECT * FROM wp_usermeta WHERE meta_key in('vip_exp_date','vip_level')) as meta ON wp_users.id = meta.user_id WHERE wp_users.user_login='admin' ORDER BY meta.meta_key

构建API接口

利用编写API接口:

请求成功

添加请求信息门槛(验证用户名和密码)

先关闭人机验证,否则以我的辣鸡实力过不了请求登录

拦截登录请求,php复现

请求成功

试用

在EasyClick框架编写js代码

效果不错

接口及案例代码

使用时记得修改31行登录页面地址为自己的,后台人机验证关闭

[hidecontent type="reply"]
<?php

require_once "../wp-config.php";

$username = $_GET['username'];
$password = $_GET['password'];

function send_post($url, $post_data) { 
  $postdata = http_build_query($post_data);
  $options = array(
    'http' => array(
    'method' => 'POST',
    'header' => '{"User-Agent": "test"}',
    'content' => $postdata,
    'timeout' => 15 * 60 // 超时时间(单位:s)
    )
  );
  $context = stream_context_create($options);
  $result = file_get_contents($url, false, $context);
  return $result;
}  
 
//使用方法
$post_data = array(
  "username" => $username,
  "password" => $password,
  "remember" =>	"forever",
  "action" => "user_signin"
);

$request = send_post('https://www.denceun.com/wp-admin/admin-ajax.php', $post_data);

// echo json_encode($request);
$data = json_decode($request, true);  // 将 JSON 数据解码为关联数组

// 如果登录成功执行下面的请求API
if ($data['error'] == 0){
    
    function getUserInfo($username){
        
        $mysqli = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
    
        if ($mysqli->connect_error) {
            return json_encode(["error" => "数据库连接失败"]);
        }
    
        $q = "SELECT * FROM wp_users LEFT JOIN (SELECT * FROM wp_usermeta WHERE meta_key in('vip_exp_date','vip_level')) as meta ON wp_users.id = meta.user_id WHERE wp_users.user_login=? ORDER BY meta.meta_key";
    
        $stmt = $mysqli->prepare($q);
        $stmt->bind_param("s", $username);
        $stmt->execute();
        
        $result = $stmt->get_result();
        $resultList = $result->fetch_all(MYSQLI_ASSOC);
        
        $stmt->close();
        $mysqli->close();
    
    
        if (count($resultList) === 2) {
            $result = $resultList[0];
            $result["vip_exp_date"] = $resultList[0]["meta_value"];
            $result["vip_level"] = $resultList[1]["meta_value"];
            unset($resultList[0]["meta_key"]);
            unset($resultList[1]["meta_key"]);
            unset($resultList[0]["meta_value"]);
            unset($resultList[1]["meta_value"]);
        }
    
        return json_encode([$result]);

    }

    $VIP = getUserInfo($username);
    
    if ($VIP == null) {
    
        $Info = [
            "display_name" => "游客",
            "vip_level" => "0",
            "vip_exp_date" => "0"
        ];
        
    } else {
        $VIP = json_decode($VIP, true);
        
        $Info = [
            "display_name" => $VIP[0]["display_name"],
            "vip_level" => $VIP[0]["vip_level"],
            "vip_exp_date" => $VIP[0]["vip_exp_date"]
        ];
    
    }
    
    echo json_encode($Info);
    
} elseif ($data['error'] == 1) {
    echo '账号或密码错误';
}

?>
[/hidecontent]


/**
 * WordPress + zibll 获取VIP信息(用户名+会员等级+时间)
 * @Author s1wei QQ:78456989
 * @Blogs https://www.denceun.com/archives/author/1
 * @param Api_Url Api登录页面(不加参数值)
 * @param username 账号
 * @param password 密码
 * @return Info(用户VIP信息)
 */

function Get_Vip_Info(Api_Url, username, password) {
    
    // 请求地址
    let url = Api_Url + 'username=' +username + '&password=' + password
    
    let Info = http.httpGetDefault(url, 10 * 1000,null)

    if (Info) {
        return Info
    } else
        return false

}

/**
 * WordPress + zibll 获取VIP信息(用户名+会员等级+时间)
 * @Author s1wei QQ:78456989
 * @Blogs https://www.denceun.com/archives/author/1
 * @param Api_Url Api登录页面(不加参数值)
 * @param username 登录用户名
 * @param password 登录密码
 * @return vip_level(会员等级)
 */

function Login(Api_Url, username, password) {

    // 获取登录结果(用户名)

    let Info = Get_Vip_Info(Api_Url, username, password)

    if (Info.indexOf("错误") > 0) {

        logd(Info)
        return false

    } else {

        let name = JSON.parse(Info)['display_name']
        let vip_level = JSON.parse(Info)['vip_level']
        let vip_exp_date = JSON.parse(Info)['vip_exp_date']

        switch (vip_level) {
            case "0" :
                vip_level = '普通会员'
                logi('用户' + name + '、您是:' + vip_level + '。到期时间为' + vip_exp_date)
                return vip_level
            case "1" :
                vip_level = '黄金会员'
                logi('用户' + name + '、您是尊贵的:' + vip_level + '。到期时间为' + vip_exp_date)
                return vip_level
            case "2" :
                vip_level = '钻石会员'
                logi('用户' + name + '、您是尊贵的:' + vip_level + '。到期时间为' + vip_exp_date)
                return vip_level
            default:
                logd("未知用户")
                return false
        }
    }
}

function main() {

    let Api_Url = 'https://www.denceun.com/api/api.php?'

// 定义用户名密码
    let username = 'www.denceun.cn'
    let password = 'www.denceun.com'

// 从 UI配置 获取用户名密码
// let username = readConfigString("username")
// let password = readConfigString("password")

    let results = Login(Api_Url, username, password)

    switch (results) {
        case '普通会员':
            logd("执行普通会员代码")
            // ......
            break;
        case '黄金会员':
            logd("执行黄金会员代码")
            // ......
            break;
        case '钻石会员':
            logd("执行钻石会员代码")
            // ......
            break;
        default:
            logd("什么鬼...")
    }
}

main()
import requests
import json

def get_vip_info(api_url, username, password):
    url = api_url + 'username=' + username + '&password=' + password
    response = requests.get(url, timeout=10)
    if response.status_code == 200:
        return response.text
    else:
        return False

def login(api_url, username, password):
    info = get_vip_info(api_url, username, password)
    if "错误" in info:
        print(info)
        return False
    else:
        data = json.loads(info)
        name = data['display_name']
        vip_level = data['vip_level']
        vip_exp_date = data['vip_exp_date']
        if vip_level == "0":
            vip_level = '普通会员'
            print(f'用户{name}、您是:{vip_level}。到期时间为{vip_exp_date}')
            return vip_level
        elif vip_level == "1":
            vip_level = '黄金会员'
            print(f'用户{name}、您是尊贵的:{vip_level}。到期时间为{vip_exp_date}')
            return vip_level
        elif vip_level == "2":
            vip_level = '钻石会员'
            print(f'用户{name}、您是尊贵的:{vip_level}。到期时间为{vip_exp_date}')
            return vip_level
        else:
            print("未知用户")
            return False

def main():
    api_url = 'https://www.denceun.com/api/api.php?'

    # 定义用户名密码
    username = 'www.denceun.cn'
    password = 'www.denceun.com'

    # 从 UI配置 获取用户名密码
    # username = readConfigString("username")
    # password = readConfigString("password")

    results = login(api_url, username, password)

    if results == '普通会员':
        print("执行普通会员代码")
        # ......
    elif results == '黄金会员':
        print("执行黄金会员代码")
        # ......
    elif results == '钻石会员':
        print("执行钻石会员代码")
        # ......
    else:
        print("什么鬼...")

if __name__ == '__main__':
    main()
阅读剩余
THE END