PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口

这篇具有很好参考价值的文章主要介绍了PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

电商API接口有哪些安全问题?

PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口,java,前端,网络

如何保证API接口安全

接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:

Token授权机制:用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。

PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口,java,前端,网络

时间戳超时机制:用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效,这个时间要保证足够完成本次请求的同时尽量短,可以减少缓存服务器的压力(见签名机制)。

签名机制:将Token和时间戳加上其他请求参数就行MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据为本次请求的签名sign,并将该签名存放到缓存服务器中,超时时间设定为跟时间戳的超时时间一致(这就是为什么要尽量短,二者时间一致可以保证无论在timestamp规定时间内还是外本URL都只能访问一次)。服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识。同一个签名只能使用一次,如果发现缓存服务器中已经存在了本次签名,则拒绝服务。

sign生成规则及步骤:

① 第一步:将所有需要发送至服务端的请求参数(空参数值的参数、文件、字节流、sign除外)按照参数名ASCII码从小到大排序(字典序)

注意:

      l 参数名ASCII码从小到大排序(字典序);

      l 如果参数的值为空不参与签名;

      l 文件、字节流不参与签名;

      l sign不参与签名;

      l 参数名、参数值区分大小写;

②第二步:将排序后的参数按照URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串strA;

③第三步:在strA后面拼接上apiKey得到striSignTemp字符串,将strSignTemp字符串转换为小写字符串后进行MD5运算,MD5运算后得到值作为sign的值传入服务端;

/* * @desc 签名函数 * @param $paramArr 系统参数 * @param $apiKey 私钥 * @return string 返回签名 */private function createSign ($paramArr,$apiKey) {    ksort($paramArr);    $sign='';
    foreach ($paramArr as $key => $val) {        if ($key != '' && $val != '') {            $sign .= $key."=".$val."&";        }    }    $sign=rtrim($sign,"&");    $sign.=$apiKey;    $sign=strtolower($sign);    $sign = md5($sign);    return $sign;}

签名校验:

/* * @desc 签名校验 * @param $token string 服务端分配的标识(不同客户端需使用不同的标识) * @param $timestamp string 时间戳,UTC时间,以北京时间东八区(+8)为准 * @param $sign string 签名 * @param $privatekey string 私钥 * @param $data 业务参数json格式 * @return bool */private function checkAuth($token,$timestamp,$sign,$privatekey,$data){        //参数判断        if(empty($token)){            show(10001,'token不能为空!');        }                if(empty($timestamp)){            show(10002,'时间戳不能为空!');        }                if(empty($data)){            show(10004,'业务参数不能为空!');        }                if(empty($sign)){            show(10006,'签名不能为空!');        }                if(empty($privatekey)){            show(10007,'私钥不能为空!');        }        //时间校验        $expire_second=config('expire_second');        $timestamp_t=$timestamp+$expire_second;        if($timestamp_t<time()){             show(10008,'请求已经过期!');        }        //系统参数        $paramArr=array(            'token'=>$token,            'timestamp'=>$timestamp,            'data'=>$data,        );
        //按规则拼接为字符串        $str = $this->createSign($paramArr,$this->privatekey);         if($str != $this->sign){             show(10009,'验签错误!');        }        return true;    }

拒绝重复调用:客户端第一次访问时,将签名sign存放到缓存服务器中,超时时间设定为跟时间戳的超时时间一致,二者时间一致可以保证无论在timestamp限定时间内还是外 URL都只能访问一次。如果有人使用同一个URL再次访问,如果发现缓存服务器中已经存在了本次签名,则拒绝服务。如果在缓存中的签名失效的情况下,有人使用同一个URL再次访问,则会被时间戳超时机制拦截。这就是为什么要求时间戳的超时时间要设定为跟时间戳的超时时间一致。拒绝重复调用机制确保URL被别人截获了也无法使用(如抓取数据)。

/** * @desc 限制请求接口次数 * @return bool */private function ask_count(){    $client_ip = $this->sys_get_client_ip();    $ask_url = $this->sys_GetCurUrl();    //限制次数    $limit_num = config('api_ask_limit');     //有效时间内,单位:秒    $limit_time = config('api_ask_time');     $now_time = time();    $valid_time = $now_time - $limit_time;    $ipwhere['ip_name'] = $client_ip;    $ipwhere['ask_url'] = $ask_url;    $ipwhere['creatime'] = array('>=',date('Y-m-d H:i:s',$valid_time));    $check_result = Db::table('log_ip_ask')->where($ipwhere)->count();      if($check_result !=='0'){          if($check_result >= $limit_num){              show(10010,'已经超出了限制次数!');        }      }        //执行插入    $add_data = array(        'ip_name'=>$client_ip,        'ask_url'=>$ask_url,        'creatime'=>date('Y-m-d H:i:s',time())    );    $result = Db::table('log_ip_ask')->insert($add_data);    if($result===false){         show(10011,'限制次数写入记录失败!');    }        return true;}
/** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @param boolean $adv 是否进行高级模式获取(有可能被伪装)  * @return mixed */private function sys_get_client_ip($type = 0,$adv=false) {    $type = $type ? 1 : 0;    static $ip  =   NULL;    if ($ip !== NULL) return $ip[$type];    if($adv){        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);            $pos    =   array_search('unknown',$arr);            if(false !== $pos) unset($arr[$pos]);            $ip     =   trim($arr[0]);        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {            $ip     =   $_SERVER['HTTP_CLIENT_IP'];        }elseif (isset($_SERVER['REMOTE_ADDR'])) {            $ip     =   $_SERVER['REMOTE_ADDR'];        }    }elseif (isset($_SERVER['REMOTE_ADDR'])) {        $ip = $_SERVER['REMOTE_ADDR'];    }    // IP地址合法验证    $long = sprintf("%u",ip2long($ip));    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);    return $ip[$type];}
/** * @desc php获取当前访问的完整url地址 * @return string */private function sys_GetCurUrl() {    $url = 'http://';    if (isset ( $_SERVER ['HTTPS'] ) && $_SERVER ['HTTPS'] == 'on') {        $url = 'https://';    }    if ($_SERVER ['SERVER_PORT'] != '80') {        $url .= $_SERVER ['HTTP_HOST'] . ':' . $_SERVER ['SERVER_PORT'] . $_SERVER ['REQUEST_URI'];    } else {        $url .= $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI'];    }    return $url;}

非法ip限制访问:此处的限制一般用在服务器间的接口调用

// 允许访问的IP列表        private $ip_allow = array(        '192.168.0.111',        '192.168.0.112',        '192.168.0.113',    );
   /**     * @desc 非法IP限制访问     * @param array $config     * @return bool     */   private function illegalip(){        if(!$this->ip_limit){            return true;        }        $remote_ip = get_client_ip();        if(in_array($remote_ip, $ip_allow)){            return true;        }        return false;    }

传输安全HTTPS

互联网发展到今天,大家越来越重视自己的隐私,各大公司也越来越重视数据的安全。传输过程中的数据安全解决方案主要是“HTTPS”,能够有效防止中间人攻击等。文章来源地址https://www.toymoban.com/news/detail-702046.html

到了这里,关于PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ChatGPT电商应用:制作淘宝标题

    正文共  845 字,阅读大约需要  6  分钟 零售/电商人群必备技巧,您将在6分钟后获得以下超能力: 批量生成商品标题 Beezy评级 :A级 *经过寻找和一段时间的学习,一部分人能掌握。主要提升效率并增强自身技能。 推荐人  |  Yolanda   编辑者  |      R amy ●此图片由Lex

    2024年02月09日
    浏览(40)
  • 淘宝、抖音、视频号直播电商“赛马”

    经过多年发展,货架电商和社交电商在当下已是一片红海,因此,淘宝、京东、拼多多API接口等电商巨头为寻求新的增长,纷纷另辟蹊径,开始在异域探索。而由于用户如今的购物需求已经发生了天翻地覆的变化,于是,乘着短视频东风的直播电商开始代替传统电商,成为了

    2024年02月04日
    浏览(42)
  • 毕业设计-基于协同过滤算法的电商平台推荐系统

    目录 前言 课题背景和意义 实现技术思路 一、文献综述 二、基于用户协同过滤推荐系统算法 三、实证分析 四、总结 实现效果图样例 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几

    2024年02月08日
    浏览(48)
  • 淘宝API接口:提高电商运营效率与用户体验的利器(淘宝API接口使用指南)

    淘宝API接口:提高电商运营效率与用户体验的利器 随着电商行业的快速发展,淘宝作为国内最大的电商平台之一,不断探索和创新,以满足不断变化的用户需求和商家需求。其中,淘宝API接口便是其创新的一个重要方面。本文将深入探讨淘宝API接口的作用、功能、优势以及使

    2024年02月10日
    浏览(41)
  • 如何使用谷歌巴德(Google Bard PaLM2)设计一个自助分析的报告平台 API?

    目录 如何使用谷歌巴德(Google Bard PaLM2)设计一个自助分析的报告平台 API?

    2024年02月16日
    浏览(49)
  • 高防CDN如何保护电商平台的在线支付系统安全

    高防CDN如何保护电商平台的在线支付系统安全?随着移动互联网的快速发展,越来越多的用户选择在手机上进行购物和支付。这种形式的便利性和灵活性推动了电商平台的发展,但同时也给电商平台的安全带来了新的挑战。尤其是在线支付系统,由于其涉及用户的金融信息,

    2024年02月07日
    浏览(51)
  • 电商淘宝补单系统源码程序的开发与部署

    一、电商淘宝补单的定义       电商平台业界人士常谈到补单一词,那么什么是他们常说的电商淘宝补单呢?作为一个入门级别的电商小白需要看一看了解了解。      电商补单是指根据平台算法和每日订单计划,根据基数触发流量推荐,达到一定销量的非自然操作。业界人

    2023年04月17日
    浏览(32)
  • 淘宝商品详情API:助力电商提升用户体验的利器

    淘宝商品详情API是一款强大的工具,可以帮助电商提升用户体验。通过这个API,商家可以获取淘宝平台上的商品详情信息,包括商品标题、描述、价格、销量等。这些信息对于商家来说非常重要,因为它们可以用于多种目的,例如在自家的网站或应用中展示相关商品,进行数

    2024年02月02日
    浏览(52)
  • ssm基于微信小程序的二手电商平台设计与实现(程序+开题)

    本系统(程序 + 源码)带文档 lw 万字以上 文末可获取一份本项目的 java 源码和数据库参考。 研究背景: 随着互联网的普及和电子商务的快速发展,二手交易市场也逐渐兴起。然而,传统的二手交易平台存在着信息不对称、交易安全性低等问题,给买卖双方带来了困扰。因此

    2024年01月16日
    浏览(46)
  • 基于Java+SpringBoot+Vue前后端分离农产品电商平台设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流 ✌ 主要内容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包