防止 API 被恶意调用,一般有哪些办法?

回答·83
最热
最新
  • 展开
    关于 API 安全的问题,主要就是以下几个问题,不一定完整: 一、身份鉴定。这个可以使用 Oauth 2.0 规范,或者带有不对称密钥加密的 token,选择 JWT 等形式,配合身份鉴定系统来保证。 二、内容防篡改。可以使用数字签名算法来进行哈希校验,强制 HTTPS 通信。最新的系统可以考虑 http/2。 三、DDoS 攻击。通过设置防火墙,控制 API 调用频率,例如协议的 rate-limit 等设置来进行沟通和控制。 四、注入攻击。这个需要从输入校验、编解码、输入过滤和转化方面着手,主流框架都有基本的防注入设计。 五、同源策略。通过正确的配置 CORS 来防止异常调用,但是只对浏览器有效。对于移动端可以通过分发证书或者 token 来验证有效的调用来源。 六、中间人攻击。这个貌似没有想到太好的办法,只能在调用端提示用户处于不安全网络,有攻击风险而自行规避。
  • 1.图片验证码 2.限制请求次数 3.流程条件限制 4.归属地是否一致 5.服务器接口验证 6.采用https 7.服务端代理请求
  • 非法访问通常使用认证来解决,方法很多session,token 常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次token是一样的
  • 展开
    恶意调用,那表示仅仅不希望调用成功,那就不说被 dos 攻击的问题了。 而防止调用成功,我之前做项目的时候,摸索出来一个超级简单有效的办法,以口令认证的方式,以 post 请求为例,默认前后端分离。 后端约束一个秘钥,+时间戳,+随机数,按一定的规则在排序,在进行 md5。 前端知道该秘钥,将时间戳,+随机数,按后端约定的规则排序,进行 md5。传递的时候,前端除秘钥外都发送给后端,后端按照规则判定 md5。通过认证,返回接口正确数据。 此方法十分简单,后端可将此方法写在公共类的构造函数里面。 如果想搞复杂点,在排序方面完全可以,前后端约定随机组合方式。 例如 md5(秘钥+随机数+时间戳+“空格”+随机数) 还可以在 md5 外面在裹一层 md5。总之前后端约定排序方法,约定秘钥,有时候就算秘钥被爆破了,不知道这恶心的排序方法也是徒劳。 而现在前端有大把的方式将代码藏起来,不容易读取代码,也从时间成本上提高的 api 的安全性和非体系调成功的复杂程度。 并且这个方法速度非常快,我想出来的,超级简单方便。
  • 增加公钥和私钥啊!你发了公钥和私钥才能调用啊!
  • 没有用,恶意调用根本挡不住。 比如短信炸弹的代码中就收集了各大网络公司的短信验证码接口。 再比如某音平台的抢福袋接口,普通用户很难抢到。某音也防不住。这个接口不仅需要用户鉴权,还需要用户关注主播,即使这样也防不住恶意调用。 所以我的意见是不要在无意义的问题上浪费时间。
  • 第一网关限流,大量恶意应该在屏蔽在进入服务以前, 第二C端时效token。 第三增加吞吐数量。 验证码实在体验太差想想别人为啥恶意攻击你能不能提升吞吐量才是正途
  • 1.接口 token 机制,自定义核心参数时间戳+签名 2.接口服务限流和服务降级保证 3.ip 或 ua 过滤请求限制 4.https+同源限制 5.有些场景可以考虑类似浏览器指纹数据校验
  • 1.身份验证 2.黑白名单 3.流量控制(控制调同一账号上限) 4.数据分析(风控)
  • 关于作弊与反作弊,不只是技术问题,更多的是经济问题。https 是没用的,最简单抓包重发、改参数可破。app 里面可以设计一套破解难度相当大的签名加密算法,同时在业务上做好监控。这样小的羊毛党没有能力破解,有能力破解的可能耗资百万,他一定有经济诉求,这时业务监控就能及时发现。youknow?