提升接口 API 的安全等级

近期,公司老板发起一个关于 api 设计、安全签名的探讨…,然后就有一项课后作业:

有什么方式能提升 api 的安全

看看别人家怎么做的?

自身经验不多,来简单看下微信的 access_token 机制来思考下,我们有哪些可以学习。

  1. 用户除了主动授权,没有暴露过其他敏感信息–Oauth2
  2. 授权获取的 code 具有唯一性过期性
  3. 授权过程中的 redirect_uri,微信会对授权链接做正则强匹配校验(server 要是使坏,就把你 close 掉)
  4. server 事先有后续获取 access_token 提供请求参数 sercetKey(必须只保存在服务器,不允许传给客户端)
  5. 微信信任的 access_token,调用有次数限制,和有效期

具体到我们,能做什么

使用 https 代替 http 方式

提供权限控制

对于公用的服务,你必须是某某权限才能访问这些 api,可能你没有登录什么都干不了。
比如,只有服务端才能获取微信的 token,因为服务端才有 secretKey 等条件

使用 JWT

  1. 规范化 security tokens 机制
  2. 服务端可以配置 sercetKey(salt),增加破解难度
  3. 具有过期性质的配置,可能你不需要在弄个缓存服务来做超时这事
    备注,需要服务端产生 JWT 给 client。避免客户端自己生成

特殊 API 给予特殊控制

防止一些敏感接口重复调用,高频调用等情况发生

参数验证

不要相信前端提交的表单,或者接口携带的参数不会出什么问题。
保不齐传个负数,丢个 0 给你处理。甚至于留个超大的文件塞爆你的库

注意敏感信息的请求方式

账号密码等名该应该放置于 request body 里,或 header 中

注意请求头的 Content-Type

比如:上传图片,必须是 image/jpeg,你 gif、png 不行,其他更不行。
Access-Control-Allow-Origin,允许哪些跨域网站可以访问我们支援。

使用 REST 来规范你的接口

  1. 限制 Http 方法
    根据 Restful 接口的规范,万物皆资源,获取的方法需要特定的方式。
    GET 用来获取资源,
    POST 用来新建资源(也可以用于更新资源),
    PUT 用来更新资源,
    DELETE 用来删除资源…
  2. 提供更丰富的 Http status code
  3. 提供友好的错误提示
    不要提示详细,具体的错误细节给到 client。那只存在日志或其他地方

参考

https://www.owasp.org/index.php/REST_Security_Cheat_Sheet > RESTful API Authentication Basics > How to Secure Your REST API using Proven Best Practices > header 的安全配置指南 > REST 架构该怎么生动地理解? > REST 的许多文献 > http://tool.oschina.net/commons/

【长按关注】看看↓↓↓?
Eminoda wechat
【前端雨爸】分享前端技术实践,持续输出前端技术文章
欢迎留言,评论交流,一起讨论前端问题
📢 因为是开源博客,为避免 Gitalk授权 带来的 安全风险,也可访问