【问题标题】:Nestjs API accept calls only from httpsNestjs API 只接受来自 https 的调用
【发布时间】:2021-02-08 01:06:20
【问题描述】:

有没有办法让nestjs REST API 只接受来自https 域的调用?

Like 默认阻止任何 curl 或 postman 请求,并且只接受我的前端客户端 (https://my-example-domain.com) 发出的请求。

【问题讨论】:

    标签: api rest security https nestjs


    【解决方案1】:

    解决您的问题的方法是使用为所有路由定义 express 的中间件。

    首先我们要解决wget、curl和postman的问题。这些工具类似于浏览器,因此检测它们的唯一方法是通过它们的名称 (User-Agent),因此我们使用 req.get (" User-Agent ") 获取用户代理的名称并使用 indexOf 进行检查,如果这些名称存在并且我们转换它们转换为Boolean ()method 之类的布尔值,然后我们检查名称是否与三个中的一个匹配,如果点击则返回。

    现在我们将使用https 协议,很简单,我们只将用户重定向到以https开头的url,但保持在当前路由上。

    const express = require("express");
    const app = express();
    
    app.use((req, res, next) => {
        let userAgent = req.get("User-Agent").toLowerCase();
        let isWget = Boolean(userAgent.indexOf("wget"));
        let isCURL = Boolean(userAgent.indexOf("curl"));
        let isPostman = Boolean(userAgent.indexOf("postman"));
    
        if (isWget || isCURL || isPostman) {
            res.sendStatus(404);
            return next();
        }
    
        res.redirect(`https://${req.headers.host + req.url}`);
        return next();
    })
    
    app.listen(port, () => {
        console.log("Listening!");
    })
    

    【讨论】:

    • 首先感谢您的回答!但是标头是客户端发送的,不可信,所以这个方法行不通:/
    猜你喜欢
    • 2014-12-29
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2012-09-04
    • 2018-01-05
    相关资源
    最近更新 更多