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

Firebase Web:如何仅允许自有域名读写数据库?

如何限制仅自有域名可读写你的数据库

嘿,这个问题太典型了——做无认证的轻量Web应用时,最担心的就是被人恶意刷库或者篡改数据。完全可以通过数据库端规则+服务器CORS配置来实现只允许你的域名发起请求,下面给你一步步拆解可行的方案:

1. 数据库层面的安全规则(核心防线)

如果你的数据库用的是Firebase、Supabase、Appwrite这类BaaS服务,它们都自带了安全规则引擎,直接在数据库端校验请求的来源域名,这是最可靠的方式(因为前端的限制很容易被绕过)。

举个Firebase Firestore的规则例子,只允许https://your-domain.com的请求读写:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      // 校验请求来源是否是你的域名
      allow read, write: if request.origin == "https://your-domain.com";
    }
  }
}

如果是Supabase,你可以在SQL里设置Row Level Security(RLS),结合请求的来源头来限制:

CREATE POLICY "Only allow requests from my domain" ON your_table
FOR ALL USING (
  current_setting('request.headers.origin') = 'https://your-domain.com'
);

这种方式的好处是:哪怕有人直接用Postman或者curl发送请求,数据库也会直接拒绝非允许域名的请求,从根源上阻断非法访问。

2. 后端中间层的CORS配置(双重保障)

如果你的数据库是通过自己的后端接口来访问的(而不是直接在前端调用数据库API),那可以在后端配置CORS,只允许你的域名跨域请求。

比如用Node.js Express框架的话,用cors包来配置:

const cors = require('cors');
const express = require('express');
const app = express();

// 只允许你的域名发起跨域请求
app.use(cors({
  origin: 'https://your-domain.com',
  credentials: true // 如果需要携带Cookie的话开启
}));

这样一来,浏览器会自动拦截来自其他域名的请求,同时后端也会拒绝非允许域名的请求,形成双重保障。

3. 前端辅助校验(仅作为补充)

前端的限制很容易被懂技术的人绕过(比如修改本地JS代码、禁用浏览器同源策略),但可以加一层辅助校验,拦截大部分非预期的前端请求:

// 在发送数据库请求前校验当前页面的来源
const allowedOrigin = "https://your-domain.com";
if (window.location.origin !== allowedOrigin) {
  console.error("非法请求来源,已拦截");
  return;
}

// 继续执行数据库读写逻辑
$.ajax({
  url: "your-db-api-url",
  // ...其他配置
});

记住,这个只是锦上添花,不能作为主要的安全措施。

几个关键注意点

  • 别忘了把开发环境的域名也加进去,比如http://localhost:3000,不然本地开发时会被拦截;
  • 如果你的域名有多个子域名,比如app.your-domain.com和www.your-domain.com,可以用通配符或者数组来配置(比如Firebase规则里用request.origin.matches(/^https:\/\/.*\.your-domain\.com$/));
  • 浏览器的同源策略只限制前端页面发起的请求,直接用工具发送的请求不受限制,所以数据库端的规则才是核心,不能只依赖CORS或者前端校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:22