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


相关推荐

  • Ubuntu16.04 apache2配置虚拟主机[通俗易懂]

    Ubuntu16.04 apache2配置虚拟主机[通俗易懂]1.首先在“/etc/hosts”文件中加入当前主机的IP地址和需要设置的虚拟主机名: 如:192.168.0.143www.moyaping2.com 2.在“/etc/apache2/sites-available”目录下有“000-default.conf” 将000-default.conf复制一份叫做redis.conf 3进入redis.conf 修改Se

    2026年1月16日
    3
  • J2SE介绍

    J2SE介绍Java2 平台包括 标准版 J2SE 企业版 J2EE 和微缩版 J2ME 三个版本 StandardEdit 标准版 J2SE 包含那些构成 Java 语言核心的类 比如 数据库连接 接口定义 输入 输出 网络编程 J2se 包含了构成 Java 语言核心的类 数据库连接 接口定义 输入输出 网络编辑等 J2se 是最基础的运行 Java 程序的工具包 包含了基本的 Java 类库 开发程序时不用使用 http 这些对象 J2ee Java2enterpr 是 Java2 的企业版 主要

    2026年3月20日
    3
  • amule for ununtu

    amule for ununtu

    2021年4月27日
    157
  • PHP实现大文件分割上传与分片上传

    PHP实现大文件分割上传与分片上传

    2021年11月4日
    64
  • SPSS 软件的使用教程

    SPSS 软件的使用教程

    2026年3月13日
    3
  • jQuery EasyUI+ashx实现数据库的CIUD操作

    jQuery EasyUI+ashx实现数据库的CIUD操作对上一个小项目做一个回顾总结,涉及到了jQueryEasyUI+ashx实现数据库的CIUD操作,和大家分享一下。基本思路是用easyui做前端,ashx做后端,中间使用json格式交换数据,其中json主要使用Newtonsoft.Json来序列化和反序列化,为简单起见,后端没有分层,数据都是靠拼接sql,使用一个简单封装的DBHelper来时间数据库的操作。1、数据库表tb_Provid

    2025年6月14日
    3

发表回复

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

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