精华内容
下载资源
问答
  • 安全架构-api接口安全设计

    千次阅读 2020-12-22 16:37:28
    安全架构-api接口安全设计 安全架构系列文章是从api接口的安全性设计引入的,讨论了api的业务安全-幂等性设计,传输安全,加签名和加解密,介绍了对称加密,非对称加密的常用算法的实现。继续回到api接口安全性设计...

    安全架构-api接口安全设计

    安全架构系列文章是从api接口的安全性设计引入的,讨论了api的业务安全-幂等性设计,传输安全,加签名和加解密,介绍了对称加密,非对称加密的常用算法的实现。继续回到api接口安全性设计方案,除了上述处理外,我们还可以在业务上增加接口调用的限制,防止和阻止异常情况的非法调用api。



    前言

    api接口主要讨论需要互联网暴露出来或者提供给第三方的接口服务。在讨论了加密,加签名,幂等性设计后,本文再补充常用的安全性处理方式。


    一、appid+appsecret方式

    appid方式是由接口提供方,给接口调用方的授权,类似于提供一个身份id。
    一般appid配合着accessToken来使用,先使用appid和appsecret来调用接口,获取accessToken,在后续的其他接口调用中,传递accessToken. accesToken一般需设置有效期,过期后需重新获取新的值。微信api接口就是这种机制。

    大部分网站基本都需要用户名和密码才能登录,并不是谁来能使用我的网站,这其实也是一种安全机制;对应的对外提供的接口其实也需要这么一种机制,并不是谁都可以调用,需要使用接口的用户需要在后台开通appid,提供给用户相关的密钥;在调用的接口中需要提供appid+密钥,服务器端会进行相关的验证;

    二、黑白名单

    1.黑名单

    如果此appid进行过很多非法操作,或者说专门有一个中黑系统,经过分析之后直接将此appid列入黑名单,所有请求直接返回错误码;
    黑名单可以是appid黑名单也可以是ip黑名单。
    ip黑名单是对某个ip有非法攻击调用接口时,将该ip加入黑名单中,直接不允许调用。

    2.白名单

    白名单一般是指ip白名单。因为appid本身就是要系统生成,存在于系统中的,已经相当于白名单了。
    白名单使用的场景一般是 服务端与服务端之间的调用,如第三方服务端调用接口提供方。此时第三方可以确认为一个或某几个ip。 可以设置ip白名单,在上线的时候,添加白名单后,运行接口调用,不在白名单里的请求ip,不允许调用。
    对于客户端调用服务端接口的,一般使用黑名单,因为客户端的ip是变化是多个的。只要黑名单控制住非法ip即可。

    三、接口限流

    除了上述的接口权限限制和安全控制外,接口调用还有并发数限制。
    本来就是真实的用户,并且开通了appid,但是出现频繁调用接口的情况;这种情况需要给相关appid限流处理,常用的限流算法有令牌桶和漏桶算法;
    常用的限流算法包括:令牌桶限流,漏桶限流,计数器限流;

    1.令牌桶限流 令牌桶算法的原理是系统以一定速率向桶中放入令牌,填满了就丢弃令牌;请求来时会先从桶中取出令牌,如果能取到令牌,则可以继续完成请求,否则等待或者拒绝服务;令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌;
    2.漏桶限流 漏桶算法的原理是按照固定常量速率流出请求,流入请求速率任意,当请求数超过桶的容量时,新的请求等待或者拒绝服务;可以看出漏桶算法可以强制限制数据的传输速度;
    3.计数器限流 计数器是一种比较简单粗暴的算法,主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数;计数器限流只要一定时间内的总请求数超过设定的阀值则进行限流;

    具体基于以上算法如何实现,Guava提供了RateLimiter工具类基于基于令牌桶算法:

    RateLimiter rateLimiter = RateLimiter.create(5);
    以上代码表示一秒钟只允许处理五个并发请求,以上方式只能用在单应用的请求限流,不能进行全局限流;这个时候就需要分布式限流,可以基于redis+lua来实现;

    四、数据合法性校验

    合法性校验包括:常规性校验以及业务校验;
    常规性校验:包括签名校验,必填校验,长度校验,类型校验,格式校验等;
    业务校验:根据实际业务而定,比如订单金额不能小于0等;

    总结

    api接口相关的安全设计文章到此处就结束了,基本可以涵盖所有涉及到的接口安全场景。
    接下来将开始深入阅读学习jvm调优相关资料。

    参考资料:
    https://www.cnblogs.com/matengfei123/p/12425731.html

    展开全文
  • 接口安全解决方案

    千次阅读 2019-03-21 08:36:53
    服务端对外开放API接口,尤其对移动应用开放接口的时候,更需要关注接口安全性的问题,要确保应用 APP 与 API 之间的安全通信,防止数据被恶意篡改等攻击。下面就简单列举几种措施来对付接口安全问题。 Token 机制 ...

    简介

    服务端对外开放API接口,尤其对移动应用开放接口的时候,更需要关注接口安全性的问题,要确保应用 APP 与 API 之间的安全通信,防止数据被恶意篡改等攻击。下面就简单列举几种措施来对付接口安全问题。

    Token 机制

    开放接口时最基本需要考虑到接口不应该被别人随意访问,而我也不能随意访问到其他用户的数据,从而保证用户与用户之间的数据隔离。这个时候我们就有必要引入 Token 机制了。
    具体的做法: 在用户成功登录时,系统可以返回客户端一个 Token,后续客户端调用服务端的接口,都需要带上 Token,而服务端需要校验客户端 Token 的合法性。Token 不一致的情况下,服务端需要拦截该请求。

    数据校验

    服务端从某种层面来说需要验证接受到数据是否和客户端发来的数据是否一致,要验证数据在传输过程中有没有被注入攻击。这时候客户端和服务端就有必要做签名和验签。
    具体做法:客户端对所有请求服务端接口参数做加密生成签名,并将签名作为请求参数一并传到服务端,服务端接受到请求同时要做验签的操作,对称加密对请求参数生成签名,并与客户端传过来的签名进行比对,如签名不一致,服务端需要拦截该请求。

    过载保护

    服务端仍然需要识别一些恶意请求,防止接口被一些丧心病狂的人玩坏。对接口访问频率设置一定阈值,对超过阈值的请求进行屏蔽及预警。

    异常封装

    服务端需要构建异常统一处理框架,将服务可能出现的异常做统一封装,返回固定的 code 与 msg,防止程序堆栈信息暴露。

    HTTPS

    HTTPS能够有效防止中间人攻击,有效保证接口不被劫持,对数据窃取篡改做了安全防范。但 HTTP 升级 HTTPS 会带来更多的握手,而握手中的运算会带来更多的性能消耗,这也是不得不考虑的问题。

    展开全文
  • 开放API接口安全设计

    千次阅读 2019-09-04 14:19:26
    为什么前后分离需要关注接口安全问题 攻击方式有哪些 如何保障接口的安全 一、前后分离和传统项目的区别 1:前端渲染方式不同 传统项目是前后端不分离的,后端通过模板渲染引擎在后端渲染前端页...

    前言

    随着项目前后端分离的火热,后台开发的重点主要是对外提供接口,那么API接口的安全就是要考虑的问题。前后端分离和传统的开发模式有很大的差异,本文将针对以下问题进行探讨:

    1. 前后分离和传统项目的区别
    2. 为什么前后分离需要关注接口安全问题
    3. 攻击方式有哪些
    4. 如何保障接口的安全

    一、前后分离和传统项目的区别

    1:前端渲染方式不同

    传统项目是前后端不分离的,后端通过模板渲染引擎在后端渲染前端页面然后发送到浏览器展现。不同的语言有不同的模板渲染引擎比如JAVA有jsp、beetl、hanldlebars,PHP有Smarty、Twig、Haml,nodejs有ejs、jade等。然而前后端分离之后前端的渲染工作将交给前端项目自行渲染,后台只通过API接口来提供数据。

    2:客户端状态维护方式不同

    传统项目通过session来维护后端和客户端的状态,然而前后分离后接口请求(ajax)是无状态请求(当然也可以修改配置来达到有状态,但是这种方式对于分布式部署来说是不可取的,当然配置session共享后也可以达到目的,但是这样对负载均衡有一定的副作用)。前后分离后一般通过token的方式来维护请求状态。

    二、为什么前后分离需要关注接口安全问题

    接口是通过http请求的方式来请求和获取数据的,这样的请求是可以通过抓包工具来拦截请求的,如果不处理的话会有很大的安全隐患。比如获取短信的接口被拦截那么别人就可以恶意刷你的短信流量,上传文件接口被拦截别人可以恶意上传从而导致服务器崩溃。黑客还可以通过Dos或CSRF来攻击服务器,所以接口安全还是很重要的。

    三、攻击方式有哪些

    常见的web攻击方式有:XSS、CSRF、SQL注入、DDOS、重放。

    XSS(跨站脚本攻击):对所有用户提交内容进行可靠的输入验证对“<”,“>”,“;”,“””等字符做过滤。

    CSRF(跨站请求伪造 cross site request forgery):

    通过伪装来自受信任用户的请求来利用受信任的网站,可以利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号

    例如:你在A网站登录了账号,在没有退出的情况下访问了B网站,B网站有黑客上传的图片且地址为A网站的接口。如果A网站存在CSRF漏洞那么你在B网站时相当于你时A的登录用户,那么B的图片地址请求的接口就被伪造成你的合法请求。

    防御:尽量使用POST;cookie设置为HttpOnly;增加token;通过Referer识别。

    重放攻击:利用抓包工具将请求重复多次发送的方式来达到攻击服务器的目的。可以通过请求时效性来防御。

    四、如何保障接口的安全

    1:调用身份认证token(防CSRF攻击)

    用户登录时根据用户生成token用来后期识别用户身份

    2:参数签名(防篡改)

    对appkey(客户端标识),token,url,参数,timestamp,rand进行MD5签名。

    请求到达服务器时需要用相同的方法进行签名并和发送过来的签名进行对比,如果不同就说明请求参数被篡改过。

    3:时效性(防重放和DDos攻击)

    通过timestamp和redis来限制请求的时效

    首先根据项目情况设定一个有效时长比如设为60s

    当请求到达服务器时首先拿timestamp和系统时间对比,如果在60s内那么timestamp校验通过,如果大于60s那么请求过期。

    如果只通过timestamp来防重放那么在60s内还是可以重放请求的,所以这样还是不够的。

    我们还需要设置一个nonce。

    请求到达服务器时去redis中查找key为nonce:{sign}的string,如果没有就创建这个key并把失效期设置为timestamp的失效期比如是60s,如果有说明在60s内这个请求已经请求过那么这个请求可以判断为重放请求。

    因为客户端和服务器的timestamp可能存在误差如果误差大于60s那么所有的请求就都被拦截了,如何解决这个问题呢?我们可以在每个接口返回时都返回一个timestamp,客户端通过这个timestamp来调整本地的timestamp这样timestamp就已服务端为准了。

    校验流程图如下:

    展开全文
  • 接口安全保护策略

    千次阅读 2018-11-09 15:07:37
    服务端对外开放API接口,尤其对移动应用开放接口的时候,更需要关注接口安全性的问题,要确保应用APP与API之间的安全通信,防止数据被恶意篡改等攻击。 对于移动应用来说,服务端开放的接口极有可能一些别有用心挖出...

    服务端对外开放API接口,尤其对移动应用开放接口的时候,更需要关注接口安全性的问题,要确保应用APP与API之间的安全通信,防止数据被恶意篡改等攻击。
    对于移动应用来说,服务端开放的接口极有可能一些别有用心挖出了,其实很难避免接口暴露到公网去,所以服务端在接口设计层面就必须加以考虑。下面就简单列举几种措施来对付接口安全问题。

    Token机制

    开放接口时最基本需要考虑到接口不应该被别人随意访问,而我也不能随意访问到其他用户的数据,从而保证用户与用户之间的数据隔离。这个时候我们就有必要引入Token机制了。
    具体的做法: 在用户成功登录时,系统可以返回客户端一个Token,后续客户端调用服务端的接口,都需要带上Token,而服务端需要校验客户端Token的合法性。Token不一致的情况下,服务端需要拦截该请求。

    数据校验

    对数据进行校验
    服务端从某种层面来说需要验证接受到数据是否和客户端发来的数据是否一致,要验证数据在传输过程中有没有被注入攻击。这时候客户端和服务端就有必要做签名和验签。具体做法:
    ** 客户端对所有请求服务端接口参数做加密生成签名,并将签名作为请求参数一并传到服务端,服务端接受到请求同时要做验签的操作,对称加密对请求参数生成签名,并与客户端传过来的签名进行比对,如签名不一致,服务端需要拦截该请求**

    过载保护

    服务端仍然需要识别一些恶意请求,防止接口被一些丧心病狂的人玩坏。对接口访问频率设置一定阈值,对超过阈值的请求进行屏蔽及预警。

    异常封装
    服务端需要构建异常统一处理框架,将服务可能出现的异常做统一封装,返回固定的code与msg,防止程序堆栈信息暴露。

    HTTPS

    HTTPS能够有效防止中间人攻击,有效保证接口不被劫持,对数据窃取篡改做了安全防范。但HTTP升级HTTPS会带来更多的握手,而握手中的运算会带来更多的性能消耗。这也是不得不考虑的问题。

    总得来说,我们非常有必要在设计接口的同时考虑安全性的问题,根据业务特点,采用的安全策略也不全相同。当然大多数安全策略更多的都是提高安全门槛,并不能保证100%的安全,但该做的还是不能少。

    展开全文
  • API接口安全

    万次阅读 2017-08-08 14:19:19
    API接口安全 1 基本概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或...
  • Http接口安全整理

    万次阅读 2018-02-08 12:14:21
    1.Http接口安全概述:  1.1、Http接口是互联网各系统之间对接的重要方式之一,使用http接口,开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享,但由于http接口开放在互联网...
  • API接口安全设计方案(已实现)

    千次阅读 多人点赞 2021-07-16 16:37:14
    2、接口安全设计 在代码层面,对接口进行安全设计 一、使用token进行用户身份认证 二、使用sign防止传入参数被篡改 三、用时间戳防止暴力请求 一、使用token进行用户身份认证 用户身份认证的流程图如下: 具体说明...
  • 这篇博文跟大家分享下如何配置微信公众号网页授权域名和JS接口安全域名配置。
  • api接口安全通俗易懂的意思就是保证接口接收到的数据不是被篡改的,防止信息泄露造成损失。那如何要加强接口的安全性呢?一、数据加密 把h5生成的数据加密(我用的是对称加密,加密还有非对称加密),第三方加密类...
  • API接口安全性设计思路

    千次阅读 2015-03-19 08:53:45
    API接口安全性设计思路
  • 高可用的接口安全规范

    万次阅读 2019-01-06 17:48:56
    一、前言 ① 上线产品 ...接口安全一般分三部分:调用方身份令牌token(验身份)、参数签名sign(防篡改)、时效性timestamp(防Doss攻击) 一、生成规则: Token:用户登录时,服务器为该用户生成身份令...
  • 本文详细介绍了针对发送短信验证码接口安全性测试过程,包含思路、部分测试代码已经测试结果。 本次测试网站 —听云(tingyun.com)
  • API安全接口安全设计

    万次阅读 2019-07-13 22:07:58
    如何保证外网开放接口安全性。 使用加签名方式,防止数据篡改 信息加密与密钥管理 搭建OAuth2.0认证授权 使用令牌方式 搭建网关实现黑名单和白名单 一令牌方式搭建搭建API开放平台 方案设计: 1第三方...
  • HTTP API 接口安全设计

    千次阅读 2017-08-04 20:07:39
    HTTP API 接口安全设计 API 接口调用方式 HTTP + 请求签名机制 HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? ...
  • app接口安全性设计浅析

    千次阅读 2017-06-24 17:09:09
    之前面试的时候被问到这个,app接口安全性,这个因不同的场景,要考虑的情况也不一样。下面把自己的见闻和思考写一下吧。(1)签名与加密 这个一般接口中会有的,典型的有MD5和AES。 一个接口形式是: ...
  • 安全性测试(四)--接口安全检查

    千次阅读 2016-04-06 14:30:59
    (四) 接口安全检查 以支付宝为例 1. 支付的接口 2. 支付的入口 3. 与各个银行的数据接口安全 4. 与支付宝的接口
  • tp5开发接口:接口安全设计

    千次阅读 2019-03-19 16:05:43
    登陆安全接口设计 1.username = red_panda 2.password = 123456 3.时间戳 timestamp = 17988732 token = md5(api_md5(red_panda) + md5(123456) + md5(timestamp)_api); service_token = md5(api_md5(red_pan...
  • 上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置、接口安全处理、AOP切面实现等。作为电商项目,不仅要求考虑高并发带来的压力...
  • php接口安全加密认证

    千次阅读 2016-11-03 09:55:40
    关于接口安全,一般非常简单的作用,只是用户验证,即合法性检查。我一个老同事一直这样用,个人感觉也未尝不可。每次请求接口的时候 验证下access_token,比如这个token是个 md5值,再在这个值上面加几个随机数,这...
  • api接口安全类型 api接口安全类型一般有以下几种类型(不完全): 防止参数篡改,使用url签名方式 防止未授权用户访问,使用用户token验证 防止未授权应用访问或者爬虫,使用appid,appsecret来保证请求授权访问 ...
  • api接口安全验证

    千次阅读 2019-06-24 09:41:02
    前台想要调用接口,需要使用几个参数生成签名。 时间戳:当前时间 随机数:随机生成的随机数 口令:前后台开发时,一个双方都知道的标识,相当于暗号 算法规则:商定好的运算规则,上面三个参数可以利用算法规则...
  • 微信公众平台服务号配置JS接口安全域名 一、注意事项: 1、可填写三个域名或路径(例:wx.qq.com或wx.qq.com/mp),需使用字母、数字及“-”的组合,不支持IP地址、端口号及短链域名。 2、填写的域名须通过ICP备案的...
  • 互联网开发--HTTP接口安全设计

    千次阅读 2017-04-17 11:32:35
    http接口安全设计的必要性作为http接口的服务端,要能控制你本身自有数据的读写权限。 如果任何客户端在任何时间都能读写你的数据,那么用户数据很容易被修改。这就好比没加用户登录就可以访问和读写所有的系统...
  • 微信JS接口安全域名填写ip地址

    万次阅读 2015-09-02 14:58:33
    微信JS接口安全域名填写ip地址时 如果填写http://123.123.123.123/ 通过微信访问时会提示invalid url domain 改成123.123.123.123就可以了
  • 接口安全性问题(面试)

    千次阅读 2018-08-30 20:02:27
    接口安全性知识面很广,我只是写下冰上一角,只是从java开发层面去写一点自己的理解 写这篇文档的缘由还要从我上家公司说起,离职后接到第一家公司的面试电话,简单的电话沟通后留下了面试的地点和时间,觉得这家公司还...
  • 【安全测试】接口安全

    千次阅读 2019-05-04 21:33:49
    之前这边负责的项目后来被主管说接口这里有些风险,特此参考学习接口安全性测试点。 一.接口防刷 1.为什么会有人要刷接口? 牟利:黄牛在 12306 网上抢票再倒卖。 恶意攻击竞争对手:如短信接口被请求一次,会...
  • php接口安全问题

    千次阅读 2016-02-22 11:52:08
    在平时工作或者正式项目中,做接口在所难免,而接口安全问题首当其冲,为了防止接口被别人恶意调用,一般会做一个加密的工作,不同的公司,都有一套不同的处理方式。我们公司也有一套处理方式,即:做了一个加密的...
  • 有个短信接口给用户注册时发送验证码的,然后现在发现有人每次用不同ip 不同号码进行恶意调用,现在接口被调爆,如何解决这个问题呢。(现在的黑科技不只是有你想象中的那么简单的) 为了避免接口防刷,我们也有很多的...
  • 微信在调用jssdk的时候需要配置接口安全域名,需要将微信的文件下载下来上传到服务器并且能直接访问,这里记录一下,nginx配置文件的修改。 location ~* \.(txt)$ { root /data/www/gm_static/mp; } nginx...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,083,361
精华内容 433,344
关键字:

接口安全