【问题标题】:What are your ways of securing a Express.js REST API?您保护 Express.js REST API 的方法是什么?
【发布时间】:2020-11-15 07:52:23
【问题描述】:

我正在构建一个以 Express.js REST API 作为后端的应用程序,并且我正试图围绕所有必要的安全措施以及要使用的库和工具来思考。
你们能否简要介绍一下您在保护过程的每个部分中使用的最喜欢和安全的库是什么?
也许还写下你为什么使用你使用的那些。这对我真的很有帮助。
提前谢谢你。

【问题讨论】:

    标签: rest express security


    【解决方案1】:
    1. 如果可以,请避免使用 CORS。 网络服务器发送的 CORS 标头告诉浏览器:“淡化或关闭针对跨站点/跨域攻击的内置保护,因为我(向您发送这个或那个 CORS 标头的网络服务器)已经被强化了很多,以至于我“不怕一些第三方(例如不是从我这里下载的)脚本调用我公开的 API。这样的脚本可能是恶意的,但我不在乎”。

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

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

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

      正则表达式可能有助于检查传入的请求,前提是它很简单,或者您使用正则表达式库,通过精心设计输入数据来降低 DoS 攻击的危险,从而导致大量资源消耗。

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

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

    6. 使用附带针对 L4 DDoS 攻击的免费保护和免费防火墙的 CDN。

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 2017-07-30
        • 2021-04-10
        • 2020-12-25
        • 2013-11-28
        • 1970-01-01
        • 2021-11-13
        • 2020-09-26
        • 2016-10-07
        相关资源
        最近更新 更多