【问题标题】:How do I limit access to my Netlify Serverless function如何限制对我的 Netlify 无服务器功能的访问
【发布时间】:2020-05-29 23:18:28
【问题描述】:

我已经搜索了netlify docs,但我无法弄清楚。

我在这里有一个无服务器功能

/.netlify/functions/orderCreate

但我可以在我的浏览器或 curl 中点击它,它会尝试创建订单。如果攻击者发现了这个功能,他们可以在我的数据库中创建数千个假订单。

我知道我可以做一些简单的检查,比如确保它是一个 HTTP 帖子,或者确保它有一些有效的会话 ID,但我真的想要某种类型的身份验证或更好的安全性。

因为所有请求应该都来自客户端通过 ajax 请求做出反应的应用程序,我可以将其限制在同一个域或其他东西吗?

【问题讨论】:

    标签: javascript aws-lambda serverless netlify


    【解决方案1】:

    由于 Netlify 不提供基于来源检查和特定请求的方法,您可以从函数代码中手动执行此操作,如果来源不是您的客户端域,则发送 403 响应:

    exports.handler = function(event, context, callback) {
        if (event.headers["Origin"] !== "https://whateverisyourdomainname.netlify.com")
            return callback(null, { status: 403 })
    
        // else, do whatever your function does
    }
    

    最近的浏览器确实阻止用户自己设置Origin 标头。但是,没有什么可以阻止任何人制作 curl 请求并欺骗 Origin 标头来攻击您的函数。如果您想真正阻止它,您应该为您的应用程序设置适当的身份验证过程

    【讨论】:

    • 您能否针对这种情况提出适当的身份验证流程?
    • 有很多方法可以实现认证过程。 Netlify 本身为它提供了一个服务:docs.netlify.com/visitor-access/identity 如果你不想使用这个服务并且已经有一个用户数据库(我不知道你的应用程序的上下文),你也可以依赖一个 JWT 认证。设置非常简单:jwt.io
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多