如今各种API接口层出不穷,一个API的好与不好有很多方面可以考量,其中“安全性”是一个API接口最基本也是最重要的一个特点。尤其是对于充值缴费类的API接口来说,如话费充值API接口、流量充值API接口、游戏Q币充值、水电煤缴费接口等,安全与否直接影响到个人或企业的财产,所以做好API接口的安全性问题尤为重要,本篇文章我们就来聊聊关于API接口的安全性。

所谓接口,服务器端直接根据user_id来做相应的会员操作,这是非常危险的接口处理,等于把当前的会员系统给完全暴露出来,只要对方改一下user_id就可操作所有会员对应的接口。

一般在PC端,我们是通过加密的cookie来做会员的辨识和维持会话的;但是cookie是属于浏览器的本地存储功能。APP端不能用,所以我们得通过token参数来辨识会员;而这个token该如何处理呢?

在做接口加密前,我们先来看以下几个方案:

方案一:

与APP端开发人员约定特定的md5组合算法,然后两端比对一下,如果相同就allow,不相同就deny;但是,这也是不安全的,如果APP程序被反编译,这些约定的算法就会暴露,特别是在安卓APP中,有了算法,完全就可以模拟接口请求通过验证。

方案二:

会员登录的时候请求登录接口,然后服务器端返回给客户端一个token,该token生成的规则是 网站公钥 + 当前uid + 当前时间戳 + 一段随机数双重加密,根据需求决定是把该token放进cache等一段时间自动失效,还是放进数据库(如果要放进数据库的话,单独拎出一张表来,顺便记录用户的登录,登出时间),在用户登出登录的时候改变一下,确保该token只能在用户人为登出登录之间有用。

为保安全,应保证让用户在一段时间内自动退出;此方案配合Linux和数据库的权限管理可以防外又防内。

方案三

通过对称加密算法,该加密算法对uid+网站公钥进行时效加密,在一定时效内可用。在会员登录成功时,服务器端对该ID加密后返回给客户端,客户端每次请求接口的时候带上该参数,服务器端通过解密认证。

但是这样做,也是不安全的。因为,防外不防内,听说这次的携程宕机就是因为内部离职人员的恶意操作。内部不怀好意的人员如果知道相应的算法规则后,就算没有数据库权限,也可以通过接口来操作相关会员。

方案四:

数据库会员表的password是带上了随机密窜并经过双重加密的md5值;在用户登录的时候,我返回会员相应的uid和password,password虽然是明文的,别人知道也不能登录,毕竟是经过加密的,然后每次请求接口的时候,通过主键uid可以很快的找到当前uid对应的token,然后再来比对。

但是这样想法是too yang too simple的,抓包的人虽然不能通过密文密码来登录该会员,然而一旦知道了这个token,除非用户更改密码,否则也可以一直通过这个token来操作该会员的相关接口。

除了以上这些,数据格式最好使用JSON格式数据,因为JSON有较好的跨平台性。在生成JSON的时候,要注意json的两种格式:对象(字典)与 数组;mobile端开发语言中没有类似PHP中的foreach不能遍历对象,只能遍历数组,他们对对象的操作一般都是通过键名去取键值。不管是成功,还是失败。接口必须提供明确的数据状态信息,并且不能返回NULL,如果返回NULL的话,在IOS端会崩掉。

当然,我们了解到的有关 API 接口安全性问题的解决方案不止这些,一些开源项目以及博主介绍的落地方案都是值得大家学习和探索的,在实际的实践中只有多多思考总结,这样才能让开发出来的API变得更加强大。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳这里链接 或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com

api接口参数加密_解决API接口开发安全性的四种方案相关推荐

  1. 电商如何解决无证经营支付业务问题?四种方案孰优孰劣?

    侯维科技 什么是"二清"?什么是无证经营支付业务? 在银行卡收单业务中,以平台对接或"大商户"模式接入持证机构,留存商户结算资金,并自行开展商户资金清算--即所 ...

  2. 记录解决windows下安装cocoapi的几种方案

    记录解决windows下安装cocoapi的几种方案 安装cocoapi遇到的常见问题及解决办法 安装流程 问题一 问题二 问题三 安装cocoapi遇到的常见问题及解决办法 安装流程 git clo ...

  3. html网页自动兼容模式,解决CSS浏览器兼容性问题的4种方案

    前端是一个苦逼的职业,不仅因为技术更新快,而且要会的东西实在太多了,更让人头疼的是,还要面临各种适配.兼容性问题. 为什么会有浏览器兼容性问题? 还不是因为浏览器厂商太多了! Chrome,Frire ...

  4. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...

  5. 限流是解决高并发大流量的一种方案,至少是可以保证应用的可用性

    # 限流算法 推荐微信公众号:[矿洞程序员]文章由高端社区fameLink联合创始人陶德与我及其他社区大佬联合发表.关注[矿洞程序员]可获得大咖陶德的私人微信. 限流是解决高并发大流量的一种方案,至少 ...

  6. 解决声卡爆音/杂音的四种方法

       内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...

  7. 解决Hash(哈希表)冲突的四种方案

    解决Hash(哈希)冲突的四种方案 参考&鸣谢 解决哈希冲突必须知道的几种方法 小僵鱼 你还应该知道的哈希冲突解决策略 vivo互联网技术 解决哈希冲突的三种方法 kaleidoscopic ...

  8. 宝塔面板屏蔽、去除、解决强制绑定手机账号的四种方法

    教程文档 从7.4.5版本开始,宝塔安装后首页强制绑定手机号码,虽然没有关闭按钮,但其实只是一个弹窗,并且只在首页提示(不排除之后官方改成其他页面也弹窗),不想绑定的用户可以直接修改面板首页文件即可关 ...

  9. 如何优雅的实现 Spring Boot 接口参数加密解密?

    点击关注公众号,Java干货及时送达 加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办法,这种方式虽然粗暴,但是灵活,因为可以拿到一手的请求参数和 ...

最新文章

  1. problem h: 一年中的第几天_一年级语文26个汉语拼音字母表读法+写法+笔顺,给孩子收藏!...
  2. JDK 10 的 109 项新特性
  3. ELK三件套安装实践之路(1)
  4. 怎么下载haarcascade_frontalface_default.xml
  5. 电脑主机,晚上就煎肉,把隔壁宿舍都馋哭了!
  6. Prolog 语言入门(一)
  7. .netcore 和 java_Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
  8. 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)...
  9. GIS基础软件及操作(十二)
  10. python与vb可以互换吗_VB转换为Python:在线把VB代码转为Python
  11. 将solidworks建的机器人模型导入到ros中
  12. Kettle spoon
  13. 证书扫描件怎么弄?手机也能轻松扫描
  14. 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统
  15. 前端:简述表单提交前如何进行数据验证
  16. Java中使用zt-exec执行多shell/Linux命令,执行日志实时推送前端
  17. 完美越狱iOS 7(jailbreak iOS 7)
  18. /usr/bin/yum: /usr/bin/python3.6.8: bad interpreter: No such file or directo
  19. 2022-2027年中国金融服务业RFID行业发展前景及投资战略咨询报告
  20. Android Studio 快捷键--MAC版详解

热门文章

  1. Ajax 网页异步调用
  2. SQLServer性能优化一则小实例(2010-07-21)
  3. 创建, 发布自己的 Vue UI 组件库
  4. c实现的trim函数
  5. Android短信操作(通过内容提供者)
  6. 亲试虚拟机为REDHAT5装VM-tool
  7. linux socket 套接字状态 EAGAIN EWOULDBLOCK EINTR 与非阻塞 简介
  8. linux tcp socket 请求队列大小参数 backlog 简介
  9. python flask gunicorn nginx 部署
  10. libuv 高性能事件驱动库 简介