এক্স-চালিত বাই দ্বারা শিরোনাম থেকে মুক্তি পাওয়া যায় না: এক্সপ্রেস


168

আমি এক্সপ্রেস সহ নোডেজে একটি সার্ভার চালাচ্ছি। আমি শিরোলেখ থেকে মুক্তি পেয়েছি বলে মনে হচ্ছে না:

X-Powered-By:Express

আমি ভাবছিলাম যে এই শিরোলেখ থেকে মুক্তি পাওয়ার কোনও উপায় আছে বা এর সাথে আমার কী বাঁচতে হবে?


@ এলেসিওএলেক্স এই প্রশ্নের আরও বেশি মতামত রয়েছে (যে কারণে এটি বেশি জনপ্রিয়), সুতরাং এর পরিবর্তে এর অন্যান্য নকলটি করা যাক।
আলেক্সি লেভেনকভ

উত্তর:


247

এক্সপ্রেসে> = 3.0.0rc5:

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

এখানে একটি সাধারণ মিডলওয়্যার যা এক্সপ্রেসের পূর্ববর্তী সংস্করণগুলির শিরোনামটিকে সরিয়ে দেয়:

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

16
এটি কাজ করার app.use(app.router);জন্য আমাকে এটি আগে রেখে দিতে হয়েছিল।
পাভেল হোলবিল

2
অ্যাপ.সেট হিসাবে একই ('এক্স-চালিত-বাই', মিথ্যা);
হ্যারিসন্ডারওয়ার্ক

1
কাজ করেনি 4.15.2। @harrisunderwork সমাধানটি কৌশলটি ব্যবহার app.set()করে।
ড্যানিয়েল ডব্লিউ।

54

কেবল রজ্যাকের উত্তরে পিগি-ব্যাক করার জন্য, আপনি কেবল (বিকল্পভাবে) এক্স-চালিত হেডারকে এইরকম অনেক কুলার / কাস্টম হিসাবে পরিবর্তন করতে পারবেন:

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

50

এক্সপ্রেস v3.0.0rc5 হিসাবে, X-Powered-Byশিরোনাম অক্ষম করার জন্য সমর্থনটি অন্তর্নির্মিত:

var express = require('express');

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

20

উত্স থেকে ( http://expressjs.com/en/api.html#app.set )। এক্সপ্রেস ৪. এক্স-এ কেবল নীচের লাইনটি ব্যবহার করে অ্যাপটি সেট করুন;

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

10

এক্স-পাওয়ারযুক্ত-বাইরের স্যুপ আউট করতে আপনি এখানে যেতে পারেন এমন একটি সহজ মিডলওয়্যার:

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

এক্ষেত্রে এক্স-পাওয়ার্ড সেট করা ডিফল্ট 'এক্সপ্রেস' কে ওভাররাইড করে, সুতরাং আপনার অক্ষম করতে এবং একটি নতুন মান সেট করার দরকার নেই।


3

এটি আরও পাকা এক্সপ্রেস ব্যবহারকারীদের কাছে সুস্পষ্ট হতে পারে, তবে কেবল এটিই আমার পক্ষে কাজ করেছে:

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

3

কখনও কখনও শীর্ষে উত্তরগুলি কাজ করে না। এটা আমার কেস। আমার কাছে এক্সপ্রেস 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();
});

এক্সপ্রেস সংস্করণ 4.16.3 এর জন্যও কাজ করেছেন। অন্য কোনও সমাধান কাজ করেনি।
জাইরয়েড

আমার জন্য খুব ধন্যবাদ কাজ!
ফার্নিক্স

2

আড়াল করার জন্য, এক্স-পাওয়ার্ড দ্বারা আপনি নোড .জেএস লাইব্রেরি হেলমেট ব্যবহার করতে পারেন ।

তার জন্য লিঙ্কটি হেলমেট

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

আপনি কি এর জন্য একটি পুরো লাইব্রেরি অন্তর্ভুক্ত করবেন?
মোহা সর্বশক্তিমান উট

হ্যাঁ আমাদের হেলমেট লাইব্রেরি ব্যবহার করতে হবে you আপনি যদি এক্সপ্রেসস ফাইনমওয়ার্ক ব্যবহার করেন তবে আপনি এই কোড অ্যাপের মাধ্যমে গ্রন্থাগারটি এড়াতে পারবেন d
অর্জুন কোরি

2

আমার পক্ষে কোনও স্ট্যান্ডার্ড সলিউশন কর্মীও নয়। অনেক খোঁজাখুঁজির পরে আমি জানতে পারলাম যে আমরা একটি রুটের ফাইল ব্যবহার করেছি যেখানে নতুন এক্সপ্রেস উদাহরণ শুরু হয়েছিল, যা পরে অ্যাপ.ইউজ ব্যবহার করে প্রথমটিতে যুক্ত করা হয়েছিল। কেবলমাত্র এই নতুন এক্সপ্রেস উদাহরণের রুটের জন্য এক্স-পাওয়ার-বাই শিরোনাম উপস্থিত ছিল।

ইস্যুর সরল ধারণা:

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);

সমাধানটি কেবল একটি নতুন এক্সপ্রেস তৈরি করা ছিল a পুরো উদাহরণের পরিবর্তে রাউটার।

const moreRoutes = express.Router();

1

Https://github.com/visionmedia/express/blob/master/lib/http.js#L72 কোডটি পড়ার ফলে আমার মনে হয় যে আপনাকে এটির সাথে বেঁচে থাকতে হবে কারণ এটি শর্তাধীন বলে মনে হচ্ছে না।

আপনার যদি একটি এনজিন্স / অ্যাপাচি সামনের অংশ থাকে তবে আপনি এটির সাহায্যে এখনও শিরোনামটি সরিয়ে ফেলতে পারেন (অ্যাপাচি জন্য Mod_headers এবং আরও Nginx এর জন্য শিরোনাম)


1
আমি মনে করি ওয়েব সার্ভার পদ্ধতির উপায় যাইহোক সেরা। এটি একটি সেরা অনুশীলন সমর্থন করে।
ডমিনিক

0

মুছে ফেলা হিডার কেবল রুট মিডলওয়্যারের ক্ষেত্রে কাজ করবে, কফিস্ক্রিপ্ট উদাহরণ

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

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

0

এগুলির ব্যতীত আমার পক্ষে কাজ করেনি, এটি ছাড়া (আপনাকে অন্য একটি প্যারামিটার যুক্ত করতে হবে):

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

আমি এক্সপ্রেস ^ 4.17 ব্যবহার করছি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.