无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了。目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提供便利的同时,也成了呗恶意攻击的对象,那么如何才能防止被恶意调用呢?

1.图形验证码:

将图形校验码和手机验证码进行绑定,在用户输入手机号码以后,需要输入图形校验码成功后才可以触发短信验证,这样能比较有效的防止恶意攻击。目前大部分应用都是采用这种方式。

2.限定请求次数:

在服务器端限定同IP,同设备,同时间范围内的接口请求次数。比如同一号码重复发送的时间间隔,一般为60或120秒;设置每个IP每天最大的发送量;设置单个手机号每天的最大发送量。

3.流程条件限定:

将手机短信验证放在最后进行,比如需要用户必须注册后,或者用不必须填写了某些条件才能进行短信验证。

4.归属地是否一致:

服务器端检查用户的IP所在地与手机号归属地是否匹配,如果不匹配则提示用户手动操作等。

5.服务器接口验证:

当用户登录成功后,返回一个由Token签名生成的秘钥信息(Token可使用base64编码和md5加密,可以放在请求的Header中),然后对每次后续请求进行Token的封装生成,服务器端在验证是否一致来判断请求是否通过。

(1)常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次token是一样的;
(2)用户登陆后生成临时token,存到服务器,并返回客户端,客户端下次请求时把此token传到服务器,验证token是否有效,有效就登陆成功,并生成新的token返回给客户端,让客户端在下一次请求的时候再传回进行判断,如此重复。 这种方法有性能问题,但也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。
(3)两层token:一般第一次用账号密码登录服务器会返回两个token,时效长短不一样,短的时效过了之后,发送时效长的token重新获取一个短时效,如果都过期,那么就需要重新登录了。当然更复杂你还可以做三层token,按照业务分不同token。

6.采用https:

线上的api接口开启https访问,这样做的话别人抓包的难度会提高很多,而且https需要秘钥交换,可以在一定程度上鉴别是否伪造IP。

7.服务器端代理请求:

针对于网站,这也是解决跨域的方案之一,采用服务器代理可以有效的防止接口真实地址的暴露。

8.其它:

当接口存在大量肉鸡攻击的时候,攻击者也同样容易暴露意图,我们可以通过系统分析算法,让攻击者获取不到有效数据,提高攻击成本。

总结:

安全问题一直都是与攻击者之间智斗勇的问题,没有一劳永逸的解决方法,只有不断交锋,不断成长

前后端分离,如何防止api接口被恶意调用或攻击的更多相关文章

  1. Django:前后端分离 djangorestframework开发API接口 serializer序列化认证组件

    参考:https://blog.csdn.net/zhangmengran/article/details/84887206 目的: 使用serializer序列化器将QuerySet数据序列化为js ...

  2. 前后端分离与 restful api

    为什么要前后端分离(优点): PC,APP,PAD 多端适应 单页面应用(Single Page Application)SPA开发模式开始流行 前后端开发职责不清 开发效率问题,前后端互相等待 前端 ...

  3. swagger -- 前后端分离的API接口

    文章目录 一.背景 二.swagger介绍 三.在maven+springboot项目中使用swagger 四.swagger在项目中的好处 五.美化界面 参考链接:5分钟学会swagger配置 参考 ...

  4. 前后端分离后API交互如何保证数据安全性

    前后端分离后API交互如何保证数据安全性? 一.前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC ...

  5. 前后端分离后API交互如何保证数据安全性?

    一.前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了 ...

  6. 【SpringSecurity系列3】基于Spring Webflux集成SpringSecurity实现前后端分离无状态Rest API的权限控制

    源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/02-springsecurity-state ...

  7. 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制

    源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...

  8. [django]前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  9. 前后端分离之JWT用户认证(转)

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

随机推荐

  1. 微信小程序向本地保存

    提示框: wx.showToast(OBJECT) 显示消息提示框 wx.saveImageToPhotosAlbum({ filePath : "./test.png", //这 ...

  2. 学习C/C++的简单方法

    如何学习C++呢.C和C++是很多专业的必修课,尤其对计算机专业来说,更是重中之重.C++语言是早期发展的高级语言,具备执行速度快,语法优美等特点.是底层高效率系统的首选开发语言.今天就和大家分享一下 ...

  3. python踩坑记录篇,持续更新

    问题1:python语法错误 错误日志如下: print(a[2])    ^IndentationError: unexpected indent [解决方案]:缩进代码错误导致,将print的缩进 ...

  4. Redis批量删除缓存数据

    背景: 在使用redis中,经常会遇到批量删除缓存的情况,但是对于在客户端中,如果一个一个的删除key,则需要较长时间及相对麻烦,可以使用以下命令,批量删除缓存. 本地批量删除KEY: ./redis ...

  5. redis消息提醒设计方案细则

    ----需求明细: 现有多个角色,角色间需要交互,内容分为申请,审核通过,拒绝,解除合作.每个角色进入自己后台显示查看其他角色的未读消息个数,点击进入显示所有发送来的内容.最开始只存储未读个数,并不知 ...

  6. BAT资深工程师由浅入深分析Tp5&Tp6底层源码☆

    第1章 课程简介 本章主要让大家知道本套课程的主线, 导学内容,如何学习源码等,看完本章要让小伙伴觉得这个是必须要掌握的,并且对加薪有很大的帮助. 第2章 [TP5灵魂]自动加载Loader 深度分析 ...

  7. javaSE集合---进度2

    一.集合框架 1.特点 对象封装数据,对象多了也需要存储,集合用于存储对象. 对象的个数确定可以使用数组,但是不确定的话,可以用集合,因为集合是可变长度的. 2.集合和数组的区别 数组是固定长度的,集 ...

  8. 2018-2019-2 20165234 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    Exp6 信息搜集与漏洞扫描 实验内容 1. 各种搜索技巧的应用 2. DNS IP注册信息的查询 3. 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点(以自己主机为目标) 4 ...

  9. html中的lang标记有什么用

    html中的lang标记有什么用 一.总结 一句话总结: 为文档或元素设定主语言(即lang) 比如google浏览器有个自动翻译的功能,而自动翻译要看这个文档的语言 1.其它标签中设置lang属性? ...

  10. 个微信小程序云开发云函数

    1. project.config.json写上云函数所在目录"cloudfunctionRoot": "cloudfunctions/",如图 2. app. ...