在 Netlify 函数中强制同源? (cors)

Posted

技术标签:

【中文标题】在 Netlify 函数中强制同源? (cors)【英文标题】:Enforce same-origin in Netlify function? (cors) 【发布时间】:2021-12-03 07:38:03 【问题描述】:

我希望在我的 Netlify 站点中强制要求来自 process.env.URL 中的所需来源。但目前我既可以cURL 也可以向 Postman 发出请求,并返回带有 statusCode 200 的响应数据。我错过了什么吗?

exports.handler = async (event, context, callback) => 
  try 
    let id = event.rawUrl.split("/").pop();
    let response;
    switch (event.httpMethod) 
      case "GET":
        response = await prisma.like.count( where:  postId: parseInt(id)  );
        break;

      case "POST":
        response = await prisma.like.create(
          data:  postId: parseInt(id) ,
        );
        break;

      case "DELETE":
        response = await prisma.like.delete(
          where: 
            id: parseInt(id),
          ,
        );
        break;
    

    callback(null, 
      statusCode: 200,
      headers: 
        "Access-Control-Allow-Origin": process.env.URL,
        "Access-Control-Allow-Headers":
          "Origin, X-Requested-With, Content-Type, Accept",
        "Access-Control-Allow-Methods": "*",
        "Content-Type": "application/json",
      ,
      body: JSON.stringify(response),
    );
    return;
   catch (e) 
    console.error(e);
    return  statusCode: 500 ;
  
;

【问题讨论】:

【参考方案1】:

CORS 是一种浏览器功能,即浏览器服从设置。 curl 不关心 CORS 并忽略它。

【讨论】:

感谢您在这里的洞察力,您知道 API 通常会尝试防止 curl 请求吗?我确实在一个随机网站上的 js 控制台中运行了 fetch,并且能够验证 CORS 是否按预期工作。 我不是安全专家。如果你想检查调用是否来自同一个域,你可以检查referrer header,但我不认为这是 100% 安全的。

以上是关于在 Netlify 函数中强制同源? (cors)的主要内容,如果未能解决你的问题,请参考以下文章

集成我的前端代码(Netlify)和我的后端代码(heroku)(CORS)的问题[关闭]

跨域请求被阻止:同源策略不允许读取远程资源,CORS 标头中缺少令牌“缓存控制”

同源策略与CORS

同源策略:JSONP和CORS

同源策略CORS

同源策略和跨域解决方案 CORS