Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我应该在RESTAPI中使用哪些头盔模块_Node.js_Rest_Api_Express_Helmet.js - Fatal编程技术网

Node.js 我应该在RESTAPI中使用哪些头盔模块

Node.js 我应该在RESTAPI中使用哪些头盔模块,node.js,rest,api,express,helmet.js,Node.js,Rest,Api,Express,Helmet.js,问题: rest API应使用哪些头盔模块 背景: 我正在构建一个Node/Express REST Api,并一直看到头盔弹出窗口是我应该使用的安全中间件。查看Hellm的文档,有些模块(内容安全策略、跨域等)似乎只适用于前端应用程序。rest API中应该使用哪些模块?人们在rest API中使用头盔的主要原因是为了避免(XSS)和脚本注入。你所要做的就是这样。请记住,它只是一个快速中间件 const helmet = require("helmet"); app.use(helmet())

问题:

rest API应使用哪些头盔模块

背景:


我正在构建一个Node/Express REST Api,并一直看到头盔弹出窗口是我应该使用的安全中间件。查看Hellm的文档,有些模块(内容安全策略、跨域等)似乎只适用于前端应用程序。rest API中应该使用哪些模块?

人们在rest API中使用头盔的主要原因是为了避免(XSS)和脚本注入。你所要做的就是这样。请记住,它只是一个快速中间件

const helmet = require("helmet");
app.use(helmet())

Helmet是一个Express.js中间件。并用于避免脚本注入。初始化应用程序时,请按如下方式使用头盔:

const express = require('express');
const helmet = require('helmet');

const app = express();

app.use(helmet());

希望这有帮助:)

tl;dr:以下内容可能对API有用,但您可以设置更多以确保安全:

  • ,它设置
    Expect CT
    头,如果API的使用者知道如何处理证书透明性,则它非常有用
  • ,它设置了
    X-Frame-Options
    标题,如果您的API响应被放入
    iframe
    或类似文件中,它将非常有用。(这是我个人碰到的。)
  • ,它设置了
    严格的传输安全性
    标题,帮助用户保持HTTPS
  • ,它设置
    X-Content-Type-Options
    标题,在浏览器中很有用,可能会尝试自动检测API响应的类型并执行意外操作。(这是我个人碰到的。)
  • ,它设置了
    X-allowed-Cross-Domain-Policies
    标题,可能有助于保护您的站点免受来自Adobe产品(如Flash)的奇怪请求

这里是《头盔》的作者

我想说,在API中使用头盔(或它设置的HTTP头)有两个原因:

  • 有些标题在非浏览器用例中很有用,比如RESTAPI
  • 以防您的响应加载到浏览器中。例如,如果黑客将其放入
    ,并导致意外事件发生。(旧浏览器有时会出现问题,导致漏洞。)您也可以这样做,以防将来API加载到浏览器中,即使现在还没有加载
  • 头盔只是13个较小的中间产品的集合。其中大多数设置了一个HTTP响应头,并且这些头中的大多数只在浏览器中有用。然而,有些对API偶尔有用(REST或其他)

    让我们列举一下:

    • ,它设置了
      内容安全策略
      头,可能没有用
    • ,它设置
      X-DNS-Prefetch-Control
      头,可能没有用
    • ,它设置
      Expect CT
      头,如果API的使用者知道如何处理证书透明性,则可能非常有用
    • ,它设置了
      功能策略
      标题,可能没有用
    • ,它设置
      X-Frame-Options
      标题,可能非常有用,以防您的API响应被放入
      iframe
      或类似文件中。(这是我个人碰到的。)
    • ,它删除了
      X-Powered-By
      标题,可能没有什么用处(在浏览器中甚至没有那么有用!)
    • ,它设置了
      严格的传输安全性
      头,可能有助于让用户使用HTTPS
    • ,它设置
      X-Download-Options
      标题,可能没有什么用处
    • 在未来的头盔版本中会被移除,而且对安全性来说也不是非常有用,所以它可能不会有用
    • ,它设置了
      X-Content-Type-Options
      标题,在可能尝试自动检测API响应类型并执行意外操作的浏览器中可能非常有用。(这是我个人碰到的。)
    • ,设置
      X-allowed-Cross-Domain-Policies
      标题,可能有助于保护您的站点免受来自Adobe产品(如Flash)的奇怪请求
    • ,它设置了
      推荐人策略
      标题,可能没有用
    • ,它设置了
      X-XSS-Protection
      头,可能没有用

    总而言之:其中一些可能有用,为了安全起见,设置其中一些标题可能值得。

    为什么案例过滤器不有用?从另外两条评论中可以看出,它是用于此目的的。
    xssFilter
    可能没有什么用处,因为(1)API使用者根本不应该执行JavaScript(2)它不能完全防止XSS攻击,即使在浏览器中也是如此。