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

使用公开访问的Google Apps Script Web应用存邮箱,Google Sheet是否安全?

关于Google Sheet隐私性的确认与保障方案

核心结论

你的Google Sheet不会被普通用户直接访问,只要正确设置表格权限,就能完全保证邮箱数据的私密性。

原因分析

  1. Web应用的doPost函数是以脚本部署者(你的Google账号)的权限访问表格,而非调用Web应用的用户权限。哪怕Web应用设为「任何人可访问(含匿名)」,用户也只能触发数据写入操作,无法获取表格的任何访问权限。
  2. 你的代码没有暴露表格ID、URL或数据内容的逻辑,用户仅能收到成功/失败的JSON响应,完全接触不到表格本身。

关键保障措施

  • 锁死表格权限:确保Google Sheet的共享权限仅对你自己开放(默认就是私密状态,不要添加外部协作者,也不要设置为「任何人可查看/编辑」)。
  • 修复代码漏洞:现有代码存在两个未定义变量的问题,会导致运行报错,需修正:
    • 变量column未定义,需指定存储邮箱的列号;
    • 变量bookCover未定义,需替换为实际内容或删除。

修正后的代码示例:

function doPost(e) {
  try { 
    const spreadsheet = SpreadsheetApp.openById("asbasdsdf...");
    const sheet = spreadsheet.getSheetByName("Subscriptions");
    const column = 2; // 根据表格实际情况,定义存储邮箱的列号
    const bookCover = "目标书籍名称"; // 替换为实际内容,或删除该变量及对应提示文本

    // 检查工作表是否存在
    if (!sheet) {
      throw new Error(`工作表 "Subscriptions" 不存在。`);
    }

    // 解析请求数据
    const data = JSON.parse(e.postData.contents);
    const email = data.email;
    
    // 检查邮箱是否已存在
    const range = sheet.getRange(1, column, sheet.getLastRow(), 1);
    const existingEmails = range.getValues().flat();
    if (existingEmails.includes(email)) {
      return ContentService.createTextOutput(
        JSON.stringify({ status: "error", message: "该邮箱已订阅 " + bookCover })
      ).setMimeType(ContentService.MimeType.JSON);
    }

    // 格式化时间戳
    const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy, HH:mm:ss");

    // 写入邮箱和时间戳
    const row = sheet.getLastRow() + 1;
    sheet.getRange(row, column).setValue(email);
    sheet.getRange(row, 3).setValue(timestamp);

    // 返回成功响应
    return ContentService.createTextOutput(
      JSON.stringify({ status: "success", message: "邮箱保存成功!" })
    ).setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    return ContentService.createTextOutput(
      JSON.stringify({ status: "error", message: error.message })
    ).setMimeType(ContentService.MimeType.JSON);
  }
}

额外注意事项

  • 不要在前端代码或响应中泄露表格ID,避免被懂技术的人尝试非法访问(但只要表格权限私密,即使有ID也无法打开)。
  • 定期查看脚本执行日志,确认无异常访问记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:08:13