API接口安全

文章讨论了前后端分离项目中接口安全的重要性,列举了可能的安全问题及解决方案,如密码加密传输、使用token代替userId、添加时间戳和nonce防止重放攻击、代码混淆以及使用HTTPS、IP黑名单和限流策略来增强安全性。同时指出,不是所有接口都需要最高安全级别,应根据关键程度选择合适的安全措施。
摘要由CSDN通过智能技术生成

目前项目都是前后端分离或者有对外提供接口的需求,在这些情况下,就要考虑接口安全。

如果不重视接口安全,可能导致严重的危害,例如数据盗取,服务宕机等。

可能的安全问题:

        1.明文密码被攻击者抓包看到

                前端可对密码或者一些关键信息进行加密传输.

        2.登录成功后,后端返回的是userId

                用户登录后,后端可以返回token不要直接返回userId,并且在后端建立userId与token的对应关系,每次发送请求都依据token来找到对应关系,对token设置有效时间并且不直接暴露userId,这样可以起到辅助安全的作用。

        3.攻击者直接拿我们加密后的密码或者token去做操作

                前端可以将请求的密码或token与时间戳进行混合后,再加密。这样即使被拦截,攻击者不知道我们的密码或token是什么。同理,后端也可以对响应的关键数据进行加密后,再返回给前端。别人获得响应后,也不知道我们的具体信息是什么。

        4.攻击者拦截数据后,肆意修改,增加后端解密的难度或者访问一些重要的数据

                可以通过签名(验签)的方式,与后端约定规则。每次请求都携带签名字段,如果为了完全安全,可以对整个请求体进行加密后(对称加密,可解密),再进行签名。

        验签的规则:

                简单版本:对请求的数据进行ASCII排序,参数的值为空不参与签名,区分大小写,传送的sign不参与签名,拼接密钥,得到最终需要MD5加密的字符串。

                复杂版本:简单版本仍然不是安全的,如果攻击者监听并截取到了请求片段,然后把签名单独截取出来模仿正式请求方欺骗服务器进行重复请求(重放攻击)仍然有安全问题。我们可以增加时效性,来避免此类攻击。

        加入 timestamp + nonce 两个参数来控制请求有效性,防止重放攻击。   

  timestamp                             

        请求端:timestamp由请求方生成,代表请求被发送的时间(需双方共用一套时间计数系统)随请求参数一并发出,并将 timestamp作为一个参数加入 sign 加密计算。

        服务端:平台服务器接到请求后对比当前时间戳,设定不超过60s 即认为该请求正常,否则认为超时并不反馈结果(由于实际传输时间差的存在所以不可能无限缩小超时时间)。 但是这样仍然是仅仅不够的,仿冒者仍然有60秒的时间来模仿请求进行重放攻击。所以更进一步地,可以为sign 加上一个随机码(称之为盐值)这里我们定义为 nonce

        nonce

        请求端:nonce 是由请求方生成的随机数(在规定的时间内保证有充足的随机数产生,即在60s 内产生的随机数重复的概率为0)也作为参数之一加入 sign 签名。

        服务端:服务器接受到请求先判定 nonce 是否被请求过(一般会放到redis中),如果发现 nonce 参数在规定时间是全新的则正常返回结果,反之,则判定是重放攻击。而由于以上2个参数也写入了签名当中,攻击方刻意增加或伪造 timestampnonce 企图逃过重放判定都会导致签名不通过而失败。

        5.攻击者知道网页代码或者反编译后端代码,自己依据规则生成签名

        可以对前端或后端代码进行混淆(前端jshsman,后端Proguard,只是举例,工具很多)。

        6.其它的安全措施

        A.黑白名单 对请求接口的ip进行过滤

        B.限流 当遇到攻击时,能通过修改配置或者实时对攻击者进行限流,以免发生雪崩的情况。

        C.https 就是http+SSL,在http的基础上添加一套SSL协议,专门用来保证http安全
SSL也是使用加密,解密,签名,校验等方式来对保证安全的,只不过它是一套专门的安全协议,有着标准完善的规范.一般一年价格几百到几万不等。

备注:并不是所有的接口都需要做到完全安全,因为安全级别越高,意味着编码复杂度越高,也会影响到服务器的性能。一般只对关键环节才使用多种安全方案,其它地方使用一种方案即可

参考文章:

(66条消息) 【Java】【通信安全】怎么保证http请求的安全性_命运之手的博客-CSDN博客_怎么保证http请求数据安全

https://juejin.cn/post/6983864029550739463

开放的API接口安全问题是一个重要的考虑因素。身份验证是确保API安全的一种方法。通过身份验证,可以限制或删除滥用API的使用者,并保护他们的安全。对于开放的API,即使是免费的API,也应该考虑采用身份验证策略以确保安全性。\[1\] 在API接口传输过程中,加密和签名也是保证安全性的重要手段。加密可以使用对称加密和非对称加密两种方式。对称加密使用相同的密钥进行加密和解密,效率高但密钥管理和分配较为复杂。非对称加密使用一对密钥,公钥和私钥,公钥可以发给任何请求者,而私钥只能由一方安全保管。非对称加密提供了更高的安全性,常用的算法是RSA算法。\[2\] 除了加密,接口传输还可以使用签名来确保数据的完整性和真实性。签名是对数据进行加密的过程,接收方可以通过验证签名来确认数据的完整性和真实性。签名可以使用MD5等混淆算法来实现。\[2\] 综上所述,开放的API接口安全问题可以通过身份验证、加密和签名等措施来解决。这些措施可以保护API安全性,防止滥用和数据泄露等问题。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [开放式API安全防护的七大原则](https://blog.csdn.net/zhanghuan0126/article/details/112856246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [开放API接口安全处理](https://blog.csdn.net/banliao3463/article/details/101663491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [开放平台API接口加密,签名策略](https://blog.csdn.net/weixin_42212026/article/details/84538971)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值