java - 如何确保服务端的接口调用安全?

 勤奋的瞌睡猪_715 发布于 2022-10-25 02:55
  • php
  • 服务端提供各种功能接口供客户端调用,那么怎样才能确保请求是来自合法的客户端,而不是非法的请求呢?

    5 个回答
    • 使用oauth2或者类似的token之类的

      2022-10-26 14:07 回答
    • 我们用的RSA加密算法,请求数据的参数均转成json然后用服务器RSA证书对json进行加密,http请求就可以了,服务端私钥解密

      2022-10-26 14:07 回答
    • 在设计API时,要保证RESTful API的安全性,主要考虑三个大方面:

      1.对受限资源的登录授权
      2.对请求做身份认证
      3.对敏感数据进行加密

      一、受限资源的登录授权
      此流程不是本文重点,不赘述,基本流程如下:

      1. 客户端提交账号信息(用户名+密码)到服务端

      2. 服务端验证成功,返回AccessToken给客户端存储
        3.访问受限资源时,客户端带入AccessToken就可访问。

      二、请求认证
      如果不对请求进行签名认证,那么可以简单的通过fiddler等工具轻易抓包拿到数据,并进行篡改,提交,大规模批量调用,则会使系统产生大量垃圾数据,系统资源被大量消耗,甚至无法正常使用(另说,当然可以通过GateWay进行限流),因而我们需要对请求进行签名认证。

      URL格式
      URL:schema://domain/path?query&imei×tamp&sign

      参数说明
      签名方法
      sign=signature(path?query&imei×tamp&SIGN_KEY)

      验证过程
      认证逻辑
      1、初始时,服务端存有各App版本的SIGN_KEY,客户端存有对应版本的SIGN_KEY
      2、当要发送请求之前,通过签名方法加密,得到一个sign
      3、发送请求的时候,连同sign一起发送给服务器端
      4、服务器端首先验证时间戳timestamp是否有效,比如是服务器时间戳5分钟之前的请求视为无效;
      5、然后取对应版本的SIGN_KEY验证sign是否合法
      6、为了防止重放攻击,需要检查sign是否在redis中存储,如不存在则存入redis(缓存5分钟)

      如何防止数据篡改
      这里通过签名参数中包含原有请求的所有参数,改动任意参数,sign值都会不同,因此无法篡改。

      如何防止重放攻击
      由于签名算法中还有imei(设备唯一Id)、timestamp参数,且签名算法为不可逆算法(如md5或sha1),因而对于正常的每个请求sign值不会重复。此时服务端可以存储5分钟的sign值,来做重放攻击时的验证过滤,超过5分钟的请求则直接被timestamp校验过滤。

      总结
      如此便实现了请求认证,防止数据篡改,重放攻击,但是需要确保App密钥(SIGN_KEY)的安全保存,其优点是容易理解与实现,缺点是需要承担安全保存密钥和定期更新密钥的负担。

      三、敏感据加密
      1)、部署SSL基础设施(即HTTPS),敏感数据的传输全部基于SSL。
      2)、仅对部分敏感数据做加密(例如账号+密码),并加入某种随机数作为加密盐,以防范数据被篡改。

      2022-10-26 14:07 回答
    • 你是如何定义合法和非法的?在SSO框架下,有token就是横着走,如果是第三方肯定需要appid和appsecret,需要授权的话还要带上AccessToken,这样也是横着走,最简单的是写一个IP拦截器,只允许信任IP通过,但是是用于内部互相调用的高级别拦截了,一般来说对方提供了token或appsecret,基本上都算是合法的吧?

      2022-10-26 14:08 回答
    • 验证token,或者服务端用OAuth2框架

      2022-10-26 14:08 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有