SpringBoo怎么保证接口安全
发布时间:2023-02-27 11:21:43 所属栏目:通讯 来源:
导读: 网络连接,只要你系统的接口暴露于外网,就避免不了接口安全问题。如果你的接口在外网裸奔,只要知道接口的地址和参数就可以调用,对于此那简直就是一场灾难。
那如何保证接口安全呢?
一般来说,
那如何保证接口安全呢?
一般来说,
|
网络连接,只要你系统的接口暴露于外网,就避免不了接口安全问题。如果你的接口在外网裸奔,只要知道接口的地址和参数就可以调用,对于此那简直就是一场灾难。 那如何保证接口安全呢? 一般来说,暴露在外网的api接口需要做到防篡改和防重放才能称之为安全的接口。 如何解决 采用https协议可以将传输的明文进行加密,但是黑客仍然可以截获传输的数据,进一步伪造请求进行重放攻击。如果黑客使用特殊手段让请求方设备使用了伪造的证书进行通信,那么https加密的内容也会被解密。 一般的做法有2种: 采用https方式把接口的数据进行加密传输,即便是被黑客破解,黑客也会花费大量的时间和精力去破解。 接口后台对接口的请求参数进行验证,防止被黑客篡改; 步骤1:客户端使用约定好的秘钥对传输的参数进行加密,得到签名值sign1,并且将签名值也放入请求的参数中,发送请求给服务端 步骤2:服务端接收到客户端的请求,然后使用约定好的秘钥对请求的参数再次进行签名,得到签名值sign2。 步骤3:服务端比对sign1和sign2的值,如果不一致,就认定为被篡改,非法请求。 防重放 防重放也叫防复用。简单来说就是我获取到这个请求的信息之后什么也不改,,直接拿着接口的参数 重复请求这个充值的接口。此时我的请求是合法的, 因为所有参数都是跟合法请求一模一样的。重放攻击会造成两种后果: 针对插入数据库接口:重放攻击,会出现大量重复数据,甚至垃圾数据会把数据库撑爆。 针对查询的接口:黑客一般是重点攻击慢查询接口,例如一个慢查询接口1s,只要黑客发起重放攻击,就必然造成系统被拖垮,数据库查询被阻塞死。 对于重放攻击一般有两种做法: 基于timestamp的方案 每次HTTP请求,都需要加上timestamp参数,然后把timestamp和其他参数一起进行数字签名。因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。 一般情况下,黑客从抓包重放请求耗时远远超过了60s,所以此时请求中的timestamp参数已经失效了。如果黑客修改timestamp参数为当前的时间戳,则sign1参数对应的数字签名就会失效,因为黑客不知道签名秘钥,没有办法生成新的数字签名。 去 redis 中查找是否有 key 为 nonce:{nonce} 的 string 如果没有,则创建这个 key,把这个 key 失效的时间和验证 timestamp 失效的时间一致,比如是 60s。 如果有,说明这个 key 在 60s 内已经被使用了,那么这个请求就可以判断为重放请求。这个请求就可以判断为重放请求。如果key没有被使用,那么这个请求就不是重放请求,因为它不会占用系统资源,所以不会影响系统正常运行。 (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
