【问题标题】:Why can anyone access my api deployed on heroku and how do i prevent it?为什么任何人都可以访问我部署在 heroku 上的 api,我该如何防止它?
【发布时间】:2022-01-23 15:53:00
【问题描述】:

到目前为止,我一直对前端感兴趣。我是节点 js 的新手。我目前正在开发一个 mern-stack 博客应用程序。我有两个文件夹后端和前端。我已经成功地将它们都部署在与此类似的链接中。

后端=> https://example-blog-backend.herokuapp.com/ 前端=> https://example-blog-frontend.herokuapp.com/

我确实收到、发布、删除、修补等请求到我的后端 url.c 但我遇到了安全问题。因为任何人都可以访问我从任何计算机部署的后端 api,并且可以查看我的所有数据。例如,当我可以从以下链接访问包含用户信息的数据时,如果我可以访问它,那么每个人都可以。这很荒谬,因为他可以看到我的所有信息。

https://example-blog-backend.herokuapp.com/users

{
 "userName": "alice",
 "password": "123567"
}
{
 "userName": "john",
 "password": "321123"
}
{
 "userName": "benjamin",
 "password": "123123"
}

https://example-blog-backend.herokuapp.com/posts

{
 "userId": 1,
 "id": 1,
 "title": "sunt aut facere repellat provident occaecati excepturi optio"
 "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et 
 cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem 
 eveniet architecto"
},
{
 "userId": 1,
 "id": 2,
 "title": "qui est esse",
 "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea 
 dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis"
},
{
 "userId": 1,
 "id": 3,
 "title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
 "body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut 
 ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et 
 labore et velit aut"
},
{
 "userId": 1,
 "id": 4,
 "title": "eum et est occaecati",
 "body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda 
 provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam 
 iure\nquis sunt voluptatem rerum illo velit"
}

我不希望任何知道我 url 地址的人以 json 格式查看此信息。我怎么解决这个问题?您如何安全地将请求发送到后端以及如何部署?提前谢谢你。

【问题讨论】:

    标签: node.js reactjs mongodb express heroku


    【解决方案1】:

    Heroku 不提供任何应用程序级别的安全性,我建议您应该在应用程序中实现某种身份验证中间件,例如 Passport.js。它可以很容易地与 Express.js 配对。您可以使用多种资源来实现这一点。

    https://medium.com/front-end-weekly/learn-using-jwt-with-passport-authentication-9761539c4314

    为了这个问题,您可以创建一个自定义中间件,例如传递一个密钥或字符串并在您的应用程序中完全匹配它。 这是一个示例:

    app.use(function (req, res, next) {
        var authToken = req.headers('AccessToken');
        if (authToken === 'Your-Own-Secret-Token') {
            next();
        }
        res.status(401).send('Unauthorized Request');
    })

    在此之后,您需要在请求中传递一个名为 AccessToken 的 Header。确保该值等于Your-Own-Secret-Token 或您决定的任何值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 2019-02-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多