it-source

X-Powered-By 헤더를 제거할 수 없습니다.표현

criticalcode 2023. 8. 19. 10:25
반응형

X-Powered-By 헤더를 제거할 수 없습니다.표현

나는 express로 nodejs에서 서버를 실행하고 있습니다.머리글을 지울 수가 없습니다.

X-Powered-By:Express

저는 이 헤더를 제거할 방법이 있는지 아니면 제가 그것을 감수해야 하는지 궁금합니다.

Express >= 3.0.0rc5에서:

app.disable('x-powered-by');

다음은 이전 버전의 Express에서 헤더를 제거하는 간단한 미들웨어입니다.

app.use(function (req, res, next) {
  res.removeHeader("x-powered-by");
  next();
});

rjack의 답변을 참고하기 위해 X-powered-by 헤더를 (선택적으로) 훨씬 더 멋진/사용자 지정으로 변경(설정)할 수도 마찬가지입니다.

app.use(function (req, res, next) {
  res.header("X-powered-by", "Blood, sweat, and tears")
  next()
})

Express v3.0.0rc5 이상에서는 다음을 사용하지 않도록 설정할 수 있습니다.X-Powered-By헤더는 다음과 같이 기본 제공됩니다.

const express = require('express');

const app = express();
app.disable('x-powered-by');

Express.js 문서:

출처(http://expressjs.com/en/api.html#app.set) .익스프레스 4에서.X는 아래 라인을 사용하여 앱을 설정하면 됩니다;

app.set('x-powered-by', false) // hide x-powered-by header!

X-Powered-By를 교체할 수 있는 편리한 미들웨어는 다음과 같습니다.

function customHeaders( req, res, next ){
  // Switch off the default 'X-Powered-By: Express' header
  app.disable( 'x-powered-by' );

  // OR set your own header here
  res.setHeader( 'X-Powered-By', 'Awesome App v0.0.1' );

  // .. other headers here

  next()
}

app.use( customHeaders );

// ... now your code goes here

이 경우 X-Powered by를 설정하면 기본 'Express'가 재정의되므로 사용하지 않도록 설정하고 새 값을 설정할 필요가 없습니다.

저도 표준 솔루션 담당자가 없습니다.검색을 많이 한 후에 새로운 익스프레스 인스턴스가 시작된 경로 파일을 사용한다는 것을 알게 되었고, 나중에 app.use를 사용하여 첫 번째 인스턴스에 추가되었습니다.이 새 고속 인스턴스의 경로에 대해서만 X-Powered-By 헤더가 있습니다.

문제에 대한 단순한 관점:

const app = express();
app.disable("x-powered-by");
app.get("/ping", (req, res) => res.send("Pong")); // <-- no X-Powered-By header

const moreRoutes = express();
moreRoutes.get("/ping", (req, res) => res.send("Pong")); // <-- X-Powered-By header still present

app.use("/api/v2", moreRoutes);

해결책은 단순히 새로운 급행을 만드는 것이었습니다.전체 인스턴스 대신 라우터입니다.

const moreRoutes = express.Router();

상단에 있는 답변이 작동하지 않을 때도 있습니다.이건 제 사건입니다.Express 4.17.1을 사용하고 있는데 아무도 응답하지 않습니다.그래서 저는 저만의 해결책을 발명했습니다.

let app = express();

app.use((req, res, next) => {
  const send = res.send;
  res.send = (data) => {
    res.removeHeader('X-Powered-By');
    return send.call(res, data);
  };

  next();
});

숨김용X-Powered-By헬멧 라이브러리를 사용할 수 있습니다.

var helmet = require('helmet');
app.use(helmet.hidePoweredBy());

아마도 이것은 숙련된 Express 사용자들에게 분명할 수 있지만, 저에게는 오직 이것만이 효과가 있었습니다.

app.configure(function() {
    app.use(function (req, res, next) {
        res.removeHeader("X-Powered-By");
        next();
    });
});

참고: 답변은 게시물에 흩어져 있으며, 이는 편집을 위한 것이며, 제가 작성한 몇 가지 추가 사항입니다.그들은 모두 테스트를 받았습니다.

참고 2: 중요한 것이 누락되었습니다. 개발 서버, Be Angular, React 또는 Webpack dev 서버를 사용하여 프런트 엔드에서 헤더를 확인하는 경우에도 헤더를 볼 수 있습니다.이는 webpack-dev-server가 실제로 Express 서버이고 현재 표시되는 것은 해당 응용 프로그램에서 제공되는 헤더이기 때문입니다.다음 옵션 중 하나를 사용하면 백엔드에서 헤더를 보내지 않습니다.


이렇게 하는 방법은 여러 가지가 있습니다.

  1. 안 함 용"X-powered-by"기본적으로 Express 옵션을 사용합니다.
import express from 'express'
const app = express()
app.disable('x-powered-by')
// app.use(...)

 
미들웨어를 사용하여 각 요청에서 제거:

  • 제거합니다.X-powered-by
import express from 'express'
const app = express()

app.use(function (req, res, next) {
  res.removeHeader("X-Powered-By");
  next();
});
  • X-powered-by를 부여합니다.
import express from 'express'
const app = express()

app.use(function (req, res, next) {
  res.header("X-powered-by", "not-Express")
  next()
})

 
헬멧을 사용하여 제거하고 10개의 다른 HTTP 권장 헤더를 구성합니다("은탄은 아니지만 도움이 될 수 있습니다!").

  • 기본 설정(11개의 HTTP 헤더 모두 적용)
import express from 'express'
import helmet from 'helmet'
const app = express()

app.use(helmet())
  • 제거하기만 하면 됩니다.X-powered-by
import express from 'express'
import helmet from 'helmet'
const app = express()

app.use(helmet.hidePoweredBy());

"노트 2" 관련:

hot reload에 webpack-dev-server를 사용하는 경우에도 이 헤더가 표시됩니다.이는 고속 서버를 사용하고 있기 때문에 헤더가 구성 중인 백엔드 Express가 아닌 해당 서버에서 헤더가 전송되기 때문입니다.

webpack-dev-server를 설정하지 않았더라도 주요 프런트 엔드 프레임워크(예: crate-react-app)에 사용되는 일부 상용 플레이트 도구는 후드 아래에서 webpack-dev-server를 계속 사용합니다.

를 들어,를 할 , 검사를 할 수 있습니다.startCRA의 스크립트("npm start"가 실행될 때 호출됨):

showing npm start react script

https://github.com/visionmedia/express/blob/master/lib/http.js#L72 코드를 읽어보니 조건부가 아닌 것 같으니 참고 살아야 할 것 같다는 생각이 듭니다.

nginx/apache 프런트엔드가 있는 경우에도 헤더를 제거할 수 있습니다(apache 및 headers용 mod_headers - more for nginx).

removeHeader는 루트 미들웨어, 커피 스크립트 예제에서만 작동합니다.

fix_headers =  (req, res, next) ->
    res.removeHeader 'X-Powered-By'
    next()

app.get '/posts', fix_headers, (req, res, next) ->
  ...

다음을 제외하고는 아무 것도 작동하지 않았습니다(다른 매개 변수를 추가해야 함).

app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))

Express ^4.17을 사용합니다.

언급URL : https://stackoverflow.com/questions/5867199/cant-get-rid-of-header-x-powered-byexpress

반응형