您保护Express.js REST API的方法是什么



我正在构建一个以Express.js REST API为后端的应用程序,我正在努力了解所有必要的安全措施以及要使用的库和工具
你们能简要介绍一下在安全过程的每一部分中你们最喜欢和使用的安全库是什么吗
也许还可以写下你为什么使用你使用的。这对我真的有很大帮助
提前谢谢。

  1. 尽可能避免CORS。由网络服务器发送的CORS报头告诉浏览器:";淡化或关闭针对跨站点/跨域攻击的内置保护,因为我(向您发送这个或那个CORS标头的Web服务器(已经变得非常强大,我不怕一些第三方(例如,不是从我那里下载的(脚本调用我公开的API。这样的脚本可能是恶意的,但我不在乎"。

    你最好让谷歌或脸书等大公司维护的网络服务器做出这样大胆的声明,因为他们有足够的资源来加强他们的网络服务器。

  2. 使用速率限制来防止L7 DoS攻击。

  3. 仔细检查输入。假设所有的输入都是恶意的,除非你所应用的审查表明它不是恶意的。更具体地说,不要假设输入是有效的JSON,不要假设JSON中的数据具有正确的JS类型,例如,不要假设整数是整数或日期确实是日期。

    Regex可能有助于检查传入请求,前提是它很简单,或者您使用Regex库,通过精心制作输入数据来减少DoS攻击的危险,从而导致大量资源消耗。

  4. 不要将Express直接暴露在互联网上,即使是通过防火墙。使用像Nginx这样的反向代理,它已经被强化为直接连接到互联网,最好是通过防火墙。使用这样的代理来压制API请求的大小、允许的HTTP谓词等

  5. 安全必须是多层次的,并在不同层次实施冗余/重复的保护措施。例如,不仅在Express中,而且在Nginx中实现速率限制。

  6. 使用CDN,该CDN具有针对L4 DDoS攻击的免费保护和免费防火墙。

  7. 对于变异(例如改变状态的API(,请使用CSRF。CSRF攻击无法窃取任何数据,因此列出某些实体的特定API不需要它。但是,如果API正在变化,例如改变服务器的状态或数据库中的数据,则需要CSRF。

  8. 避免在API处理程序中阻塞CPU密集型或耗时的任务。将只有一个线程执行所有Express处理程序,因此无论线程是被动地等待数据库查询完成还是忙于进行一些冗长的计算,都无法在处理一个请求时阻止它。这需要以非阻塞的方式进行处理,这将通过降低Express遭受CPU耗尽攻击的可能性来提高可扩展性和安全性。

  9. 保存详细的日志(可用于取证(,如今存储成本很低。当运行时错误发生时,请记录所有血腥的细节,这些细节将包含无法完全预测或控制的措辞。与此方法相反,对发送回API调用方的错误消息的措辞/确切内容进行严格控制。不要包括全部细节,尤其是那些措辞事先不知道的细节,因为调用者不需要知道,这可能有助于XSS反射。

  10. 看看这个。TLS终止占用CPU,因此最好不要使用Express来处理TLS。它可以在Nginx上完成,也可以通过足够先进的防火墙完成,或者与证书采购一起外包给CDN。

  11. 在Linux上,不要以root用户身份运行Express。在Windows上,不要使用管理帐户启动Express。请使用另一个帐户,并确保它无权写入除日志记录目录之外的任何磁盘目录/文件。

您应该使用CORS来防止从不需要的来源(域、协议或端口(访问您的API。要在Express.js应用程序中设置CORS,请使用CORS库

关于CORS的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

相关内容

最新更新