• 前后端分离,如何防止接口被其他人调用或恶意重发


    前后端分离,如何防止接口被其他人调用或恶意重发?

    首先,http协议的无状态特性决定了是无法彻底避免第三方调用你的后台服务。我们可以通过crsf、接口调用频率、用户行为分析(来源等)等各个方面来增加第三方调用的难度,也可以通过添加一个中间层比如node.js来实现;
    1. 非法访问通常使用认证来解决,方法很多session,token,oauth第三方框架等等。

    (1)常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次token是一样的;
    (2)用户登陆后生成临时token,存到服务器,并返回客户端,客户端下次请求时把此token传到服务器,验证token是否有效,有效就登陆成功,并生成新的token返回给客户端,让客户端在下一次请求的时候再传回进行判断,如此重复。 这种方法有性能问题,但也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。

    (3)两层token:一般第一次用账号密码登录服务器会返回两个token,时效长短不一样,短的时效过了之后,发送时效长的token重新获取一个短时效,如果都过期,那么就需要重新登录了。当然更复杂你还可以做三层token,按照业务分不同token。

    2. 对于合法的认证访问,通常需要进行IP访问频率和次数的限制,各种API框架都有支持,比如Django restframework的throttling。
      通常我们可以通过使用过滤器和缓存如redis来判断访问次数及频率。在filter层加一个过滤器,拦截所有的请求,解析出请求的用户,然后通过缓存,获取到该用户当前已访问次数。而缓存,要求最好能够自动超时回收,也就是说比如你想设定三分钟内限制访问次数,那么你记录的缓存有效期就三分钟就好了,过了三分钟缓存自动失效,计数器也就重新从0开始了。类似于发短信的接口,每分钟只能发一次;
    3. 最外层的限制可能需要在nginx上配置rate limit。

    参考自:http://blog.csdn.net/codercwm/article/details/58607420

    http://blog.csdn.net/mylovepan/article/details/38894941

  • 相关阅读:
    异步多线程 Thread ThreadPool Task
    ASP.NET MVC IActionFilter IResultFilter IExceptionFilter/HandleError
    ASP.NET MVC Area 区域
    ASP.NET MVC Bundles 合并压缩(js css)
    ASP.NET MVC ActionMethodSelectorAttribute 以及HttpGet等Action特性
    ASP.NET MVC Form表单验证与Authorize特性
    ASP.NET MVC Owin 基本理解
    CSS 基础 例子 图片拼合技术
    CSS 基础 例子 display属性:block、inline和inline-block的区别
    UVa 1326
  • 原文地址:https://www.cnblogs.com/xiaozhang2014/p/7750562.html
Copyright © 2020-2023  润新知