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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VS Code 必备插件推荐「建议收藏」

    VS Code 必备插件推荐「建议收藏」插件说明备注AutoCloseTag自动添加HTML/XML关闭标签AutoRenameTag自动重命名配对的HTML/XML标签Beautify格式化代码BracketPairColorizer颜色识别匹配括号CodeRunner非常强大的一款插件…

    2022年5月6日
  • 漫画自动下载工具。

    漫画自动下载工具。

    2021年9月17日
  • Java8 Lambda表达式教程

    Java8新特性,Lambda表达式与集合类bulkoperation教程。迄今为止最全面的中文原创javalambda表达式教程。

    2022年4月7日
  • 为什么从Java开发转测试?

    为什么从Java开发转测试?前言很多粉丝关注我可能是从乐优商城项目关注的,这确实是我曝光度最高的一篇blog了包括现在新增的粉丝的话也是从乐优商城项目blog关注的ps:大家有询问我要源码,我以前是有上传到github上的,但是由于里面用到了阿里云,github天天给我发邮件报警说有风险,然后我就删除了,所以源码的话,现在是没有了的但是我觉得乐优商城过于大,用的技术栈也很多,如果面试的时候不能充分讲明白的话,尽量不要用这个项目去面试大家如果要用他面试的话可以从以下几个思路去讲1、整体是一个什么项目?主体业务流程是什么

    2022年7月16日
  • accessors 作用_EasyExcel与@Accessors(chain = true)不兼容分析

    accessors 作用_EasyExcel与@Accessors(chain = true)不兼容分析EasyExcelEasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel.github地址:https://github.com/alibaba/easyexcelAccessors@Accessors注解用来配置lombok如何产生和显示getters和setters的方法。public@interfaceAcce…

    2022年10月31日
  • js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]

    js给数组添加数据的方式/js 向数组对象中添加属性和属性值[通俗易懂]参考:https://www.cnblogs.com/ayaa/p/14732349.htmljs给数组添加数据的方式有以下几种:直接利用数组下标赋值来增加(数组的下标起始值是0)例,先存在一个有3个数据的数组:letarr=[1,2,3];console.log(arr);  此时输出的结果是[1,2,3]letarr=[1,2,3];arr[3]=5;console.log(arr);  此时的输出结果是[1,2,3,5];通过数组名[数组名.le.

    2022年6月11日

发表回复

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

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