原文地址:https://dzone.com/articles/securing-apis-2
将一个老化的庞大且单一的应用程序改造成一个微服务架构的应用具有很强的吸引力并且也变成了一个趋势。很多企业正在鼓励开发人员开发API,因为API能帮助这些企业方便的进行数据交换。如果你有一个复杂的系统需要开发,而且这个系统要求你快速的交付并且在很长的一个期间内会频繁变动,那么使用API开发是一个很好的选择。
现在,所面临的问题是:怎么让你开发的API更安全?一个安全的API从开始设计它的那刻就要考虑了。
下面的这些方式能帮助提高你开发的API的安全性
一、编码的安全性
在项目开始时开发人员就要考虑编码的安全性。如果我们遵守 OWASP (开放Web应用程序安全项目) 的准则、工具以及开发习惯,几乎85%的脆弱的代码都能被修正。对我们开发的系统接收到的每一个数据进行验证是非常重要的。举个例子,假设我们有一个API,它有一个名为name的字符串参数并且收到这个参数后会有一些业务处理逻辑。那么我们不要仅对name进行非空检查,而要保证按一个特定的模式检查,比如检查name仅能包含字符或数字。这能避免任何模式下的SQL注入的发生。
二、DevSecOps(安全DevOps)
现在许多公司在使用DevOps,但随着我们向物联网和机器人技术的发展,未来将是DevSecOps时代。DevSecOps就是在DevOps流程中建立运行安全检查。Web应用和API已经成为了黑客攻击者的首要目标,因此在你的CI/CD管线中增加运行安全网关是非常好的。SAST(Static Application Security Testing 静态应用安全测试) and DAST(Dynamic Application Security testing 动态应用安全测试) 的工具能很容易的和CI/CD管线融合在一起运行。这些工具在应用的构建过程中将能检查出SQL注入问题和其他脆弱性的问题。
三、用HTTPS代替HTTP
在所有地方都要将HTTP替换为HTTPS。HTTPS或SSL在互联网或者企业内部网中的两个设备或机器之间提供安全的访。HTTPS 和SSL支持服务器端的数字证书,因此它支持客户端和服务端互相认证,防止黑客在链路中间的攻击。
四、访问和标识Token
OAuth2.0在使用方面提供了一种委托授权机制。它是使用范围最广泛的行业标准之一,并且它不同的用户场景提供不代的授权类型。
OAuth 2.0 客户证书流能保证客户端和服务器端的安全交流。JWT认证是另外一种可选的认证方式,它为你的每个场景提供了非常多的适用的选择。
五、检查代码库
我们的许多应用和API都使用了第三方类库,这些第三方类库几乎占全部代码的80%。因此检查第三方类库中存在的问题是非常重要的。我们应该建立我们自己的发布流程来防止使用存在问题的第三方类库。我们可以使用JFrog Xray和其他可用的工具来检查第三方类库。
六、保护秘密信息
一个经验原则是不要在使用未认证连接通讯的源码中存储使用你的API秘钥、密码、客户证书或者其他涉密信息,把这些涉密信息存在环境变量中是一个好的习惯。
总得来说,我们要加密我们的涉密信息和密码,将它们作为外部依赖在应用中引用使用。一个流行的方式是在 Spring 的Spring-Vault中存储涉密信息。
其他类似的选择:
1.使用流量限制
2.打开防火墙-web and application
3.使用API 网关来强制实行不同的策略
网友评论