【问题标题】:how to block a request from other domains in node js如何在节点js中阻止来自其他域的请求
【发布时间】:2020-08-19 05:41:22
【问题描述】:

我是 node js 的新手,有一项任务要做。我有以下代码。我需要阻止来自其他域的请求,除了允许的几个。您能帮我如何执行此任务吗?

import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';
import requestIp from 'request-ip';
import os from 'os';
import { AppRoutes, AuthRoutes } from './routes';
import { logger } from './shared-services/logger';
import { MESSAGE } from './constants/index';

const app = express();

app.use(cors());
app.disable('x-powered-by');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use((req, res, next)=> {
  const clientIp = requestIp.getClientIp(req);
  logger.debug(JSON.stringify(req.socket.address()));
  logger.debug(`incoming IP ${clientIp}`);
  next();
});

//api Routes.

app.use('/abc', AuthRoutes);

// Check if route exist
app.use((req, res, next) => {
  if (!req.route) {
    logger.error(`${req.originalUrl}, ${MESSAGE.ERROR_NO_ENDPOINT}`);
    res.status(404).send(returnResponseObj(`${req.originalUrl}, ${MESSAGE.ERROR_NO_ENDPOINT}`));
  }
  next();
});

export default app;

提前致谢。

【问题讨论】:

    标签: javascript node.js express routes cross-domain


    【解决方案1】:

    使用 CORS(Cross Orgin Request) 来阻止或添加其他域。

    这是 npm 链接

    cors npm

    var express = require('express')
    var cors = require('cors')
    var app = express()
    
    var whitelist = ['http://example1.com', 'http://example2.com']
    var corsOptions = {
      origin: function (origin, callback) {
        if (whitelist.indexOf(origin) !== -1) {
          callback(null, true)
        } else {
          callback(new Error('Not allowed by CORS'))
        }
     }
    }
    
     app.get('/products/:id', cors(corsOptions), function (req, res, next) {
       res.json({msg: 'This is CORS-enabled for a whitelisted domain.'})
     })
    

    【讨论】:

    • 能否请您帮我举个简单的例子,以便我可以轻松理解。感谢您的回复。
    • 我用代码示例进行了编辑。它只允许白名单的网址,您可以动态地将网址添加到白名单数组中。如果您想阻止某些特定的 url 来阻止(所有其他的都将被允许),您需要更改您的“if”语句。
    • 我有这样两个 URL 被允许,其余的应该被阻止。测试 - https://.test.abc.com 产品 - https://.internal.abc.com 。如何在现有代码中使用这两个。如果我只是评论一个 app.use(cors());行。
    • app.get('/products/:id', cors(corsOptions), function (req, res, next) { res.json({msg: '这是为白名单启用 CORS领域。'}) })。 // 检查这一行。
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2013-11-03
    • 2017-09-12
    • 2014-07-09
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多