【系统安全】浅谈保障接口安全的10种技术手段

本文讨论了程序员在保障接口安全时应采取的措施,包括传输加密(如AES),数据加签验证,授权认证机制,时间戳和nonce校验,IP策略,以及如限流、熔断和高级验证码等防攻击手段。案例分析了闲鱼、公证处摇号查询接口安全问题及其影响。
摘要由CSDN通过智能技术生成

接口安全是系统稳定亘古不变的道理,作为程序员可以从哪些方面下手呢?

注:因为一些原因,突然想总结接口安全的重要性。之前写过类似的文章,今天增加一些案例总结其应用场景。

1、接口传输加密,不单单依赖https的ssl证书。请求参数、返回结果加密, 如果系统改造成本较大,建议结果约定好密钥双向对称加密(比如AES)。针对核心资产数据,比如2c的商品库、楼盘库等,通过加密增加破解难度。现在fiddler 、charles抓包工具盛行,如果加密这块不上心,可能底裤被扒了个遍。

 为什么闲鱼放弃网页端,专注APP和小程序?一定程度原因,是因为网页端加解密算法在浏览器端,本身不安全,容易被竞争对手爬取二手物品。另外一个杭州的例子,公证处摇号查询之前接口是不加密的, 房小团(原名摇号助手)就是通过爬取摇号查询做小程序推广起家的,导致大家都知道房小团却很少知道公证处源头。 核心数据的隐私安全性至关重要。

2、数据加签验证,防止数据被篡改。同时公共参数增加appkey、appsret等参数,验证请求者身份, 类似支付宝开放接口。

数据加签:用Hash算法(比如md5)把原始请求参数生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名sign(这个过程就是加签)。通常来说呢,请求方会把数字签名和报文原文一并发送给接收方。

验签:接收方拿到原始报文和数字签名(sign)后,用同一个Hash算法(比如都用MD5)从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。

appKey(appid)本身是一个身份验证,服务端通过给客户端颁发appKey,通过接口请求服务端就知道是哪个客户端做的请求,方便做流量监控,后续想做根据调用次数计费,或者限流,都有迹可循。计费、限流只是其中的一些应用场景,还有不少,这里就不一一细说。

3、 授权认证机制。通过appkey、appScret参数,生成一定时效的token, 防止token被截取。 这种处理接口安全的方式,你会发现微信、钉钉等开放接口类似这样的设计。

4、 增加timestamp + nonce校验。这种一般配合2或3使用。timestamp控制接口的时效性,保证接口参数被泄露,也很难频繁刷接口。 比如可以通过timestamp设置5分钟有效,超过5分钟接口请求无效。nonce可设置用完一次被销毁,多少时间不可重复传递(服务端可通过redis等缓存组件判断值appKey+nonce等是否存在,细节按照自己的要求设计)。

5、IP白名单, 针对接口服务调用服务,做ip白名单。 也许你有疑问,既然有了1,2,3了,为啥还要考虑ip白名单。  拿公司内部项目举例,人员离职变动不可避免, 假设某个核心技术人员知道加解密规则,是不是可以模拟做些事情。 加了ip白名单,一定程度可以避免这种事情的发生。

6、IP黑名单, 通过ecs服务器上配置安全组策略、或者iptables,把恶意攻击的ip加入黑名单。比如增加防爬策略,把经常爬取网站的机器ip封掉。

7、限流机制, 限流的方式大致计数器算法、漏桶算法、令牌桶算法。  用计数器、令牌桶做限流相对多一点,毕竟漏桶比较难解决突发流量。 如大名鼎鼎的Guava RateLimiter 就是令牌桶的实现,  简单限流也可以借助redis的 incr命令。

8、削峰机制,比如商品秒杀,可以通过MQ消息中间件削减部分压力。中小公司可能平时用不到,像12306、淘宝、微博这种大流量比较常见。

9、熔断机制,当服务请求过大, 对一些不重要的请求或后续请求 做熔断处理。阿里的Sentinel或Netflix的hystrix  框架就是解决这个场景,也可以根据实际的需求自行实现。

10、增加高级验证码, 比如一些手机号码注册等服务, 要考虑增加验证码(滑块或其他高级验证码)的方式,搭配ip策略,防止有人恶意批量轮询不同手机号码刷接口短信次数。 现在简单的图形验证码很容易被破解, 可以见我之前写的一篇文章。【python爬虫】图形验证码识别的几种技术实现方案

随心记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值