You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js版Lambda中识别反馈表单的网站来源URL?

用Node.js实现Lambda识别反馈表单的网站来源

方法1:前端主动携带网站标识

前端提交表单时,在请求体中加入网站来源字段,可通过window.location.hostname自动获取当前域名,避免手动输入错误。

Lambda中直接从请求体提取该字段,示例代码:

exports.handler = async (event) => {
  // 解析API Gateway传入的请求体
  const requestBody = JSON.parse(event.body);
  const { fullName, email, message, siteOrigin } = requestBody;
  
  // 构造邮件内容
  const emailContent = `Full Name: ${fullName}
Email: ${email}
Message: ${message}
Origin of URL: ${siteOrigin}`;
  
  // 调用SES发送邮件的逻辑(需确保Lambda有SES发送权限)
  // 示例:const ses = new AWS.SES({ region: 'us-east-1' });
  // await ses.sendEmail({/* 邮件参数 */}).promise();
  
  return {
    statusCode: 200,
    body: JSON.stringify({ message: '反馈提交成功' })
  };
};
  • 优势:实现简单,不受跨域或代理导致的头信息丢失影响
  • 注意:前端需确保字段名与Lambda解析逻辑一致

方法2:通过请求头自动获取来源

利用浏览器自动携带的Origin或Referer请求头,Lambda中提取并处理域名部分:

exports.handler = async (event) => {
  // 从请求头提取来源信息
  const headers = event.headers;
  let siteOrigin = headers.origin || headers.referer;
  
  // 提取纯域名(去除协议、路径等)
  if (siteOrigin) {
    const url = new URL(siteOrigin);
    siteOrigin = url.hostname;
  } else {
    siteOrigin = 'Unknown'; // 处理无来源的异常情况
  }
  
  // 解析用户提交的表单数据
  const requestBody = JSON.parse(event.body);
  const { fullName, email, message } = requestBody;
  
  // 构造邮件内容
  const emailContent = `Full Name: ${fullName}
Email: ${email}
Message: ${message}
Origin of URL: ${siteOrigin}`;
  
  // 调用SES发送邮件逻辑
  // ...
  
  return {
    statusCode: 200,
    body: JSON.stringify({ message: '反馈提交成功' })
  };
};
  • 优势:前端无需额外修改,自动获取来源
  • 注意:部分代理或跨域场景下,Origin/Referer可能被隐藏,需确保API Gateway允许这些头传递到Lambda

安全校验(可选)

为防止恶意伪造来源,可将可信网站域名存入Lambda环境变量,提前校验:

// 从环境变量读取可信站点列表
const trustedSites = process.env.TRUSTED_SITES.split(',');
if (!trustedSites.includes(siteOrigin)) {
  return {
    statusCode: 403,
    body: JSON.stringify({ message: '来源站点不被允许' })
  };
}

内容的提问来源于stack exchange,提问作者csaju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:45:33