PHP接口上传参数返回参数混淆

PHP接口上传参数返回参数混淆

大家好,又见面了,我是全栈君。

<?php

/**
 *User: 
 *Date: 2021-01-20
 */

class Myapp extends Base_Controller
{
    public function __construct()
    {
        parent::__construct();
//        $this->load->model("myiapp_model");
        $this->pkg = 'com.geekre.org';
        $this->dck = explode(',', file_get_contents('./dck.json'));
    }

    /**
     * 生成所有对应此包名的url路径
     * 上传参数key
     * 下发参数key
     * 1: aes  2: des
     */
    public function myiappAdd()
    {
        $allinfo = array();
        $jmfs = rand(1, 2);

        //获取全部url路由
        $getAlljkurl = $this->getAlljkurl();

        foreach ($getAlljkurl as $urlk => $urlv) {
            $setrandurlpath = $this->setrandurlpath();
            $allinfo[$setrandurlpath]['jmfs'] = $jmfs;
            $allinfo[$setrandurlpath]['oldurl'] = $urlv['url'];

            /**
             * 1. 上传参数
             */
            $filterparams = array();
            if (!empty($urlv['params'])) {
                foreach ($urlv['params'] as $key => $val) {
                    $currentparams = $this->setrandparams();
                    $wn2 = 0;
                    while (in_array($currentparams, $filterparams) && ($wn2 < 100)) {
                        $currentparams = $this->setrandparams();
                        $wn2++;
                    }

                    $allinfo[$setrandurlpath]['params'][$val] = $currentparams;
                    $filterparams[] = $currentparams;
                }
            } else {
                $allinfo[$setrandurlpath]['params'] = array();
            }

            /**
             * 2. 返回参数
             */
            $filterreturnparams = array();
            if (!empty($urlv['returnparams'])) {
                foreach ($urlv['returnparams'] as $key2 => $val2) {
                    $currentparams2 = $this->setrandparams();
                    $wn3 = 0;
                    while (in_array($currentparams2, $filterreturnparams) && ($wn3 < 100)) {
                        $currentparams2 = $this->setrandparams();
                        $wn3++;
                    }

                    $allinfo[$setrandurlpath]['returnparams'][$val2] = $currentparams2;
                    $filterreturnparams[] = $currentparams2;
                }
            } else {
                $allinfo[$setrandurlpath]['returnparams'] = array();
            }

            /**
             * 3.随机code  msg data
             */
            $msgarr = array('code', 'msg', 'data');
            $filterreturnmsg = array();
            foreach ($msgarr as $msgk => $msgv) {
                $currentparams3 = $this->setrandparams();
                $wn5 = 0;
                while (in_array($currentparams3, $filterreturnmsg) && ($wn5 < 100)) {
                    $currentparams3 = $this->setrandparams();
                    $wn5++;
                }

                $allinfo[$setrandurlpath]['msgparams'][$msgv] = $currentparams3;
                $filterreturnmsg[] = $currentparams3;
            }

            //随机生成垃圾字段
            //$allinfo[$setrandurlpath]['ljparams'] = array();
            //$allinfo[$setrandurlpath]['ljmsg'] = array();
            $allinfo[$setrandurlpath]['pkg'] = $this->pkg;

            /**
             * 4. 将随机生成的url生成json文件
             */
            $everyjson = json_encode($allinfo[$setrandurlpath]);
            $everydir = './oelfktjgawp3452/url/' . $setrandurlpath . '.json';
            file_put_contents($everydir, $everyjson);
        }
        //存入包名对应的json文件
        $alljson = json_encode($allinfo);
        $dir = './oelfktjgawp3452/pkg/';
        file_put_contents($dir . $this->pkg . '.json', $alljson);

        $this->show_json(array('code' => 200, 'msg' => '导入路由成功', 'data' => []));
    }

    /**
     * 给包名 追加url
     * @return bool
     * User: 
     * Date: 2021-01-21 10:57
     */
    public function appendUrl()
    {
        $pkg = $this->input->get('pkg');
        if (empty($pkg)) {
            return false;
        }
        $this->pkg = $pkg;
        //追加的时候,这个包是已经存在的包,所以这个包的json文件应该是存在的
        $pkgjsonname = './oelfktjgawp3452/pkg/' . $pkg . '.json';
        if (!file_exists($pkgjsonname)) {
            return false;
        }
        //当前这个包已经有的url
        $pkgjson = file_get_contents($pkgjsonname);
        if (!$pkgjson) {
            return false;
        }

        $pkgarr = json_decode($pkgjson, true);
        $pkgurlarr = [];
        foreach ($pkgarr as $k => $v) {
            array_push($pkgurlarr, $v['oldurl']);
        }
        $oldjmfs = isset($v['jmfs']) ? $v['jmfs'] : rand(1, 2);
        //获取目前所有的url
        $allurl = $this->getAlljkurl();

        //需要追加生成的url
        $diffurlarr = [];
        foreach ($allurl as $k => $v) {
            if (!in_array($v['url'], $pkgurlarr)) {
                array_push($diffurlarr, $v);
            }
        }
        if (empty($diffurlarr)) {
            echo "没有需要追加的路由";
            exit;
        }

        //循环生成额外的随机路由
        foreach ($diffurlarr as $urlk => $urlv) {
            $setrandurlpath = $this->setrandurlpath();

            $allinfo[$setrandurlpath]['jmfs'] = $oldjmfs; //1==aes  2==des 保持和之前的加密方式一致
            $allinfo[$setrandurlpath]['oldurl'] = $urlv['url'];
            $filterparams = array();
            if (!empty($urlv['params'])) {
                foreach ($urlv['params'] as $key => $val) {
                    $currentparams = $this->setrandparams();
                    $wn2 = 0;
                    while (in_array($currentparams, $filterparams) && ($wn2 < 100)) {
                        $currentparams = $this->setrandparams();
                        $wn2++;
                    }
                    $allinfo[$setrandurlpath]['params'][$val] = $currentparams;
                    $filterparams[] = $currentparams;
                }
            } else {
                $allinfo[$setrandurlpath]['params'] = array();
            }

            $filterreturnparams = array();
            if (!empty($urlv['returnparams'])) {
                foreach ($urlv['returnparams'] as $key2 => $val2) {
                    $currentparams2 = $this->setrandparams();
                    $wn3 = 0;
                    while (in_array($currentparams2, $filterreturnparams) && ($wn3 < 100)) {
                        $currentparams2 = $this->setrandparams();
                        $wn3++;
                    }
                    $allinfo[$setrandurlpath]['returnparams'][$val2] = $currentparams2;
                    $filterreturnparams[] = $currentparams2;
                }
            } else {
                $allinfo[$setrandurlpath]['returnparams'] = array();
            }

            //随机code  msg data
            $msgarr = array('code', 'msg', 'data');
            $filterreturnmsg = array();
            foreach ($msgarr as $msgk => $msgv) {
                $currentparams3 = $this->setrandparams();
                $wn5 = 0;
                while (in_array($currentparams3, $filterreturnmsg) && ($wn5 < 100)) {
                    $currentparams3 = $this->setrandparams();
                    $wn5++;
                }
                $allinfo[$setrandurlpath]['msgparams'][$msgv] = $currentparams3;
                $filterreturnmsg[] = $currentparams3;
            }

            //随机生成垃圾字段
            //$allinfo[$setrandurlpath]['ljparams'] = array();
            //$allinfo[$setrandurlpath]['ljmsg'] = array();
            $allinfo[$setrandurlpath]['pkg'] = $pkg;

            //将随机生成的url生成json文件
            $everyjson = json_encode($allinfo[$setrandurlpath]);
            $everydir = './oelfktjgawp3452/url/' . $setrandurlpath . '.json';
            file_put_contents($everydir, $everyjson);
        }

        //将pkg目录下的对应的json文件备份,并将追加的路由写入文件
        $pkgdir = './oelfktjgawp3452/pkg/';
        //创建备份目录
        $bakdir = $pkgdir . 'bak/';
        $res = true;
        if (!file_exists($bakdir) && !is_dir($bakdir)) {
            $res = mkdir($bakdir, 0777, true);
        }

        //pkg 目录下的json文件
        $pkgfilejson = $pkgdir . $pkg . '.json';

        if (file_exists($pkgfilejson) && $res) {
            $bakfilename = $bakdir . $pkg . date('YmdHis') . '.json';
            $jsonstr = file_get_contents($pkgfilejson);
            $jsonarr = json_decode($jsonstr, true);
            foreach ($allinfo as $k => $v) {
                $jsonarr[$k] = $v;
            }
            if (rename($pkgfilejson, $bakfilename)) {
                $r = file_put_contents($pkgfilejson, json_encode($jsonarr));
            }
            if ($r) {
                echo "成功写入文件,文件名为" . $pkgfilejson;
                die();
            }
        }
        echo "写入文件失败";
        die();
    }

    //生成随机参数
    public function setrandparams()
    {
        $arr = $this->dck;
        $count = count($arr) - 1;
        $params = $arr[rand(0, $count)];
        unset($arr);
        return $params;
    }


    //全部需要加密混淆的url参数
    public function getAlljkurl()
    {
        $res = array(
            array(
                'url' => 'v1/user/register ',
                'params' => array(
                    'email', 'password'
                ),
                'returnparams' => array(
                    'data'
                ),
            ),
            array(
                'url' => 'v1/user/login ',
                'params' => array(
                    'email', 'password'
                ),
                'returnparams' => array(
                    'data'
                ),
            ),
            array(
                'url' => 'v1/user/view ',
                'params' => array(
                    'username', 'email', 'token'
                ),
                'returnparams' => array(
                    'data'
                ),
            ),

        );

        return $res;
    }

    //生成随机路径
    public function setrandurlpath()
    {
        $arr = $this->dck;
        $count = count($arr) - 1;
        $prev = $arr[rand(0, $count)];
        $urlpath = $prev;
        $pkgarr = explode('.', $this->pkg);
        unset($pkgarr[0]);
        shuffle($pkgarr);

        $pkgcount = count($pkgarr) - 1;
        $pkgcount = ($pkgcount > 4) ? 4 : $pkgcount;
        $dircount = rand(0, $pkgcount);
        for ($i = 0; $i <= $dircount; $i++) {
            $name = $pkgarr[$i];
            $urlpath .= '-' . $name;
        }
        $urlpath = trim($urlpath, '-');
        $urlarr = explode('-', $urlpath);
        shuffle($urlarr);
        $urlpath = implode('-', $urlarr);
        unset($arr);
        //$this->show_json(array($urlpath));
        return $urlpath;
    }
}

实现效果:

PHP接口上传参数返回参数混淆

 

数据字典文件 点击下载  dck.json

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111597.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月18日 上午10:00
下一篇 2022年2月18日 上午11:00


相关推荐

  • Android sha1_android studio打包apk教程

    Android sha1_android studio打包apk教程目录开发版SHA1获取:发布版SHA1获取:开发版SHA1获取:首先win+r后点击确认输入cd.android再输入命令行:keytool-list-v-keystore~/.android/debug.keystore-aliasandroiddebugkey(注意目录选择、开发版本、发布版本等问题)密码:原始密码一般为android,(输入密码时时没有变化的直接输入回车就行)发布版SHA1获取:需要知道签名文件key.

    2022年8月11日
    6
  • Vue中插值表达式,v-text和v-html三者区别[通俗易懂]

    Vue中插值表达式,v-text和v-html三者区别[通俗易懂]概述我们在学习vue的过程中,对指令的学习是必不可少的,下面结合自己工作和学习的一点经验介绍下vue中插值表达式,v-text和v-html三者的区别插值表达式我们知道页面的加载时自上而下的,js加载是同步的。当页面刷新比较频繁或者网上较慢的时候,我们使用插值表达式页面会先出现‘{{message}}’,再用真实数据替换‘{{message}}’(模拟这种现象可以将vue.js的引…

    2022年6月13日
    38
  • linux export添加环境变量_查看环境变量linux

    linux export添加环境变量_查看环境变量linux环境变量定义:Itsanamedobjectthatcanbeusedbymultipleapplicationsasitcontainssomevaluableinformationrequiredbytheseapplications环境变量时一个具有特定名字的对象,包含了一个或多个应用程序要用到的信息.可通俗理解为,假如一个工厂里有一大堆的工具

    2025年8月31日
    8
  • 关于JS循环Table

    关于JS循环TableTable 实例 循环方法 方法 1 varpMsg for nbsp i nbsp nbsp 0 nbsp i nbsp nbsp document getElementBy tbVehicletb rows length nbsp i nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp for nbsp j nbsp nbsp 0 nbsp j nbsp nbsp document getElementBy tbVehicletb rows i cells length nbsp j

    2025年8月13日
    9
  • 再生龙

    再生龙再生龙用后感 1 在不同的主板上备份和恢复的速度不同 废话 sata 要比 ide 的快一些 2 感觉再生龙在备份中如果资源有问题 可能备份不了 3 将整盘镜像恢复到分区中 虽然可以恢复 但是无法启动 原因在于没有将 MBR 信息业恢复过去 4 将 6GFD7 系统 含有两个分区 dev sda1 根分区 dev sda2swap 分区 备份后恢复到 20G 硬盘中 Restore st

    2026年3月26日
    2
  • 完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

    完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)申请公司的苹果开发者账号和企业级的苹果开发者账号时 都会用到邓白氏编码 也就是我们申请苹果开发者账号时需要填写的 D U N SNumber nbsp nbsp 申请这个邓白氏编码是免费的 但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个 9 位的 D U N SNumber 需要一段时间 我申请得到 D U N SNumber 用了 8 个工作日 不算周末哦

    2026年3月20日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号