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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 专业编写c语言的软件,适合编写C语言代码的几款软件

    专业编写c语言的软件,适合编写C语言代码的几款软件C语言基本上是大学计算机及其相关专业在大一上学期就会开的一门课程,但是很多学生听得都是一些理论知识,其实究其主要原因,还是因为你在上课认真听了,但是却没有在课后好好的自己去主动敲代码,想要动手操作,就需要几款编程利器,手机电脑都可以,下面我们就先看一下手机软件:手机软件1.C语言编译器:这是手机上的一个C语言编程软件,可以直接在手机上编译运行C语言程序,下面我简单介绍一下这个软件:首先,下载安装C…

  • 梳理一下各大平台使用的sample rate convert算法

    梳理一下各大平台使用的sample rate convert算法梳理一下各大平台使用的resample算法

    2022年10月16日
  • tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]

    tof相机简介及三维坐标转化,plotly画3D点云[通俗易懂]最近在做TOF相机相关的软件,近年来tof相机开始在手机,车载设备,VR等应用开始增多,产业也开始量化,是一个不错的3维相机的方向。简单介绍一下tof相机吧:TOF是Timeofflight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。具体原理介绍参考:http://w…

  • Centos7安装Nginx详细安装步骤

    Centos7安装Nginx详细安装步骤Centos7安装Nginx步骤手动配置nginx的yum仓库使用yum命令安装nginx启动nginx访问nginx1.指定nginx的yum仓库说明:centos系统中默认的yum仓库中没有nginx的安装包,所以要想安装nginx需要单独指定它的仓库地址1.1将nginx.repo上传到Linux服务器下的/etc/yum.repos.d/下nginx.repo文件…

  • idea打包maven项目jar_tomcat部署maven项目

    idea打包maven项目jar_tomcat部署maven项目今天遇到一个需求,客户要求项目用maven管理,真是操碎了心,还好最终解决了,也在这里分享一下心得。首先选中要buide成maven的包——>右键——>addframeworksupport…,然后勾选maven即可;…

  • 如何启用计算机双通道内存的方法,内存条怎么插 组建内存双通道正确插法教程…

    如何启用计算机双通道内存的方法,内存条怎么插 组建内存双通道正确插法教程…当我们安装或升级内存时,发现主板上有四个内存插槽,所以不知道该插入哪个内存插槽。事实上,理论上,任何一个内存插槽都可以正常使用。但是如果随意插上,未必能搭建双通道,搭建双通道也是有讲究的。那么双通道内存是什么意思呢?怎么安装?下面,安装者之家将为大家普及双通道内存的知识,并附上正确插入双通道内存的教程。希望这篇文章能对大家有所帮助。设置内存双通道插入教程一、双通道内存是什么意思?有什么好处?我们知…

发表回复

您的电子邮箱地址不会被公开。

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