您如何保护Express.js REST API?

您如何保护Express.js REST API?,rest,express,security,Rest,Express,Security,我正在构建一个以Express.js REST API为后端的应用程序,我正试图了解所有必要的安全措施以及使用哪些库和工具。 你们能简要介绍一下在安全过程的每一部分中,你们最喜欢的安全库是什么吗? 也许还可以写下你为什么要用你用的那些。这对我真的有很大帮助。 提前感谢。您应该使用CORS来阻止来自不需要的来源(域、协议或端口)的API访问。要在Express.js应用程序中设置CORS,请使用库 有关CORS的更多信息: 尽可能避免CORS。 Web服务器发送的CORS头告诉浏览器:“降低或关闭

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

提前感谢。

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

有关CORS的更多信息:

  • 尽可能避免CORS。 Web服务器发送的CORS头告诉浏览器:“降低或关闭内置的跨站点/跨域攻击保护,因为我(向您发送此或该CORS头的Web服务器)已被加固得非常厉害,以至于我不怕某些第三方(例如,不是从我处下载的)调用我公开的API的脚本。这些脚本可能是恶意的,但我不在乎”

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

  • 使用速率限制来防止L7 DoS攻击

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

    Regex有助于检查传入的请求,前提是它很简单,或者您使用Regex库,该库通过精心设计输入数据以导致大量资源消耗,从而减轻了装载DoS攻击的危险

  • 不要将Express直接暴露于Internet,即使是通过防火墙。使用像Nginx这样的反向代理,它已经被加固,可以直接连接到互联网,最好是通过防火墙。使用这样的代理来限制API请求的大小、允许的HTTP谓词等

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

  • 使用CDN,它附带了针对L4 DDoS攻击的免费保护和免费防火墙

  • 对于变异(如状态改变API),使用CSRF。 CSRF攻击无法窃取任何数据,因此列出某些实体的特定API不需要它。但如果API发生变化,例如更改服务器状态或数据库中保存的数据,则需要CSRF

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

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

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

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