/api.php

.........................

switch ($_POST['act'])

{

case 'search_goods_list': search_goods_list(); break;

//............................

default: api_err('0x008', 'no this type api'); //输出系统级错误:数据异常

}

.........................

function search_goods_list()

{

check_auth();           //检查基本权限 ~~~鸡肋了

$version = '1.0'; //版本号

if ($_POST['api_version'] != $version)    //网店的接口版本低

{

api_err('0x008', 'a low version api');

}

if (is_numeric($_POST['last_modify_st_time']) && is_numeric($_POST['last_modify_en_time']))

{

$sql = 'SELECT COUNT(*) AS count' .

' FROM ' . $GLOBALS['ecs']->table('goods') .

" WHERE is_delete = 0 AND is_on_sale = 1 AND (last_update > '" . $_POST['last_modify_st_time'] . "' OR last_update =

0)";

$date_count = $GLOBALS['db']->getRow($sql);

if (empty($date_count))

{

api_err('0x003', 'no data to back'); //无符合条件数据

}

$page = empty($_POST['pages']) ? 1 : $_POST['pages'];       //没过滤

$counts = empty($_POST['counts']) ? 100 : $_POST['counts']; //没过滤

$sql = 'SELECT goods_id, last_update AS last_modify' .

' FROM ' . $GLOBALS['ecs']->table('goods') .

" WHERE is_delete = 0 AND is_on_sale = 1 AND (last_update > '" . $_POST['last_modify_st_time'] . "' OR last_update =

0)".

" LIMIT ".($page - 1) * $counts . ', ' . $counts;       //$counts也没用单引号包含

$date_arr = $GLOBALS['db']->getAll($sql);

..............................

}

function check_auth()

{

$license = get_shop_license();   // 取出网店 license信息

if (empty($license['certificate_id']) || empty($license['token']) || empty($license['certi']))

{

api_err('0x006', 'no certificate'); //没有证书数据,输出系统级错误:用户权限不够

}

if (!check_shopex_ac($_POST, $license['token']))

{

api_err('0x009'); //输出系统级错误:签名无效

}

/* 对应用申请的session进行验证 */

$certi['certificate_id'] = $license['certificate_id']; // 网店证书ID

$certi['app_id'] = 'ecshop_b2c'; // 说明客户端来源

$certi['app_instance_id'] = 'webcollect'; // 应用服务ID

$certi['version'] = VERSION . '#' .   RELEASE; // 网店软件版本号

$certi['format'] = 'json'; // 官方返回数据格式

$certi['certi_app'] = 'sess.valid_session'; // 证书方法

$certi['certi_session'] = $_POST['app_session']; //应用服务器申请的session值

$certi['certi_ac'] = make_shopex_ac($certi, $license['token']); // 网店验证字符串

$request_arr = exchange_shop_license($certi, $license);

if ($request_arr['res'] != 'succ')

{

api_err('0x001', 'session is invalid'); //输出系统级错误:身份验证失败

}

}

function get_shop_license()

{

// 取出网店 license

$sql = "SELECT code, value

FROM " . $GLOBALS['ecs']->table('shop_config') . "

WHERE code IN ('certificate_id', 'token', 'certi')

LIMIT 0,3";

$license_info = $GLOBALS['db']->getAll($sql);

$license_info = is_array($license_info) ? $license_info : array();

$license = array();

foreach ($license_info as $value)

{

$license[$value['code']] = $value['value'];

}

return $license;

}

鸡肋的是check_auth()作了权限检查

EXP:

ecshop api.php,ecshop2.72 api.php 文件鸡肋注入相关推荐

  1. ArcGIS+百度地图API:制作杭州市边界shp文件

    参考文章:百度地图API+ArcGIS软件-城市出行时空数据可视化_WenWu_Both的博客-CSDN博客 这篇博客在介绍的时候遗漏了很多关键步骤,我对此进行了必要的补充. 一.获取轮廓线的代码(g ...

  2. 关于Kubernetes中API Server使用token、kubeconfig文件认证的一些笔记

    写在前面 学习K8s涉及,整理笔记记忆 博文偏实战,内容涉及: token方式的API Server认证Demo Kubeconfig文件方式的API Server认证Demo Kubeconfig文 ...

  3. SSM_Mybatis_Day01(快速入门、映射文件概述、核心配置文件概述、相应API、代理开发方式、映射文件深入、数据类型的映射、列名和属性名不一致的时候的处理)

    SSM_Mybatis_Day01(快速入门.映射文件概述.核心配置文件概述.相应API.代理开发方式.映射文件深入.数据类型的映射.列名和属性名不一致的时候的处理) 1. Mybatis mybat ...

  4. android 读取mysql中的图片_Android 通过API获取数据库中的图片文件方式

    Overview 今天复习了一下Android 如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示. 开发环境以及技术 使用Visual Studio 2019 Android Stu ...

  5. Linux开发之Delphi FMXLinux(二)、Delphi对Linux操作系统内核态主要的Api封装(FMUX.Api.pas)

    目录 Linux开发之Delphi FMXLinux(二).Delphi对Linux操作系统内核态主要的Api封装(FMUX.Api.pas) 1.代码的版权(比较新的代码库): 2.依赖: 3.其中 ...

  6. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  7. python封装api linux_python Socket编程-python API 与 Linux Socket API之间的关系

    python socket编程 by SA19225409 地址协议家族 Python 支持 AF_UNIX. AF_NETLINK. AF_TIPC 和 AF_INET 家族 AF_UNIX 基于本 ...

  8. dingo php,用laravel dingo/api创建简单的api

    这篇文章主要介绍了关于用laravel dingo/api创建简单的api,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1,修改.env配置文件添加API_STANDARDS_TRE ...

  9. 使用PHP创建一个REST API(Create a REST API with PHP)

    译者前言: 首先这是一篇国外的英文文章,非常系统.详尽的介绍了如何使用PHP创建REST API,国内这方面的资料非常非常的有限,而且基本没有可操作性.这篇文章写的非常好,只要对PHP稍有了解的程序员 ...

最新文章

  1. tf.contrib.layers.xavier_initializer
  2. 高并发系统搭建:web负载均衡
  3. 模组使用之dB、dBm、dBw、dBu、dBc的含义和之间的关系
  4. SQL Server 行转列,列转行。多行转成一列
  5. apache的rewrite模块实例操作
  6. gitter 卸载_最佳Gitter渠道:PHP
  7. Python3 网络爬虫:漫画下载,动态加载、反爬虫这都不叫事
  8. .NET Core Web API:您需要了解的最少知识(第2部分,共2部分)
  9. [RMAN]使用RMAN删除过期归档日志
  10. 数据结构练手02 双向链表实现
  11. 【UNIX环境高级编程】UNIX基础知识
  12. 【Proteus仿真】基于STC15单片机简易数码管定时器时钟
  13. 偏最小二乘回归(PLSR)算法原理
  14. html背景图片带边框,css 使用background背景实现border边框效果
  15. a标签去下划线或文字添加下修饰_怎样去除ul li a标签文字下的下划线
  16. 软件开发过程 文档
  17. “光庭杯”第五届华中北区程序设计邀请赛 暨 WHU第八届程序设计竞赛(部分解题报告)
  18. 基于Python的贝壳某城市二手房交易分析及预测系统 文档+项目源码+演示视频
  19. java word转Pdf 指定字体库
  20. 微信小程序只允许触发一次点击事件(防止多次点击事件)

热门文章

  1. DataTable实现分组
  2. Ngui之UI框架的层级处理
  3. Openstack的镜像上传原理
  4. SQL Server中行列转换 Pivot UnPivot (转载)
  5. PHP CURL 使用代理访问服务器
  6. iPhone是否越狱的检测方法
  7. [导入]Ajax初试
  8. linux的系统移植——uboot常用命令
  9. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)
  10. Linux下生成指定大小文件(命令+Java程序)