亚洲中文字幕乱码亚洲-蜜桃成熟视频在线观看-免费中文字幕视频在线-中国五十路熟妇洗澡视频-亚洲av伊人啪啪c-国产精品成人一区二区-国产自拍视频一区在线观看-成人一区不卡二区三区四区-亚洲情精品中文字幕99在线

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

Supabase 安全防坑指南:你的 anon key 其實(shí)是透明的

0
分享至

Supabase 安全防坑指南:你的 anon key 其實(shí)是透明的


最佳策略,沒(méi)有絕對(duì)把握不要自己做用戶(hù)登錄和收付款。只需要抱大腿。比如在Steam,Apple,微信等平臺(tái)發(fā)布產(chǎn)品。

在使用 Supabase 開(kāi)發(fā)項(xiàng)目時(shí),我發(fā)現(xiàn)很多新手(包括早期的我)都會(huì)有一個(gè)誤區(qū):覺(jué)得只要把anon key藏在環(huán)境變量里就安全了。

但事實(shí)是:你的anon key根本不是秘密。它是發(fā)送給瀏覽器和客戶(hù)端的,任何人都能拿到。

Supabase 的安全護(hù)城河不在于隱藏這個(gè) key,而在于你的RLS(行級(jí)安全策略)。

今天我整理了一份 Supabase 安全硬化指南,如果你正在用它做小項(xiàng)目,建議對(duì)照檢查。

核心風(fēng)險(xiǎn):那把“萬(wàn)能鑰匙”

Supabase 提供了兩把鑰匙:

  1. anonkey:公開(kāi)的。就像你家大門(mén)的把手,誰(shuí)都能摸到。
  2. service_rolekey:超級(jí)管理員。它會(huì)繞過(guò)所有的 RLS 限制。絕對(duì)不能暴露在客戶(hù)端代碼里!

如果你的數(shù)據(jù)漏了,通常不是因?yàn)?key 被盜,而是因?yàn)槟愕?RLS 策略(Row Level Security)根本沒(méi)開(kāi),或者寫(xiě)得太松。

常見(jiàn)的幾個(gè)“大坑”

在看代碼前,先看看這幾個(gè)典型的翻車(chē)現(xiàn)場(chǎng):

  • 完全沒(méi)開(kāi)啟 RLS:這是頭號(hào)死法。只要沒(méi)開(kāi),anon角色就能通過(guò) REST API 讀寫(xiě)所有數(shù)據(jù)。
  • 過(guò)于寬容的策略:比如FOR SELECT USING (true),這相當(dāng)于直接把數(shù)據(jù)表公開(kāi)給全人類(lèi)。
  • 盲目信任客戶(hù)端傳來(lái)的 User ID:如果你在策略里用user_id = request.body.user_id,黑客只需要改一下請(qǐng)求包里的 ID,就能看別人的數(shù)據(jù)。
動(dòng)手硬化:小項(xiàng)目的 5 步安全策略 第一步:開(kāi)啟 RLS,立刻,馬上!

在插入任何數(shù)據(jù)前,先執(zhí)行這一句。默認(rèn)情況下,開(kāi)啟 RLS 但不寫(xiě) Policy,意味著“零訪問(wèn)”。

ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
第二步:只信任auth.uid()

永遠(yuǎn)不要相信客戶(hù)端發(fā)來(lái)的 User ID。Supabase 的 JWT 是經(jīng)過(guò)驗(yàn)證的,用auth.uid()才是防篡改的。

-- ? 安全做法:通過(guò)驗(yàn)證后的 JWT 獲取當(dāng)前用戶(hù) ID
CREATE POLICY "own_data_only" ON notes
  FOR ALL USING (auth.uid() = user_id)
  WITH CHECK (auth.uid() = user_id);
第三步:顯式限制anon角色

除非你明確需要公開(kāi),否則默認(rèn)應(yīng)該拒絕匿名訪問(wèn)。比如,只允許匿名用戶(hù)讀取設(shè)為“公開(kāi)”的文章:

-- 只允許讀取公開(kāi)內(nèi)容
CREATE POLICY "public_posts" ON posts
  FOR SELECT USING (is_public = true);
第四步:使用SECURITY DEFINER函數(shù)

對(duì)于復(fù)雜的邏輯,建議寫(xiě)成 Postgres 函數(shù)并放在服務(wù)端運(yùn)行。

CREATE FUNCTION get_my_profile()
RETURNS json
LANGUAGE sql
SECURITY DEFINER  -- 以函數(shù)所有者權(quán)限運(yùn)行,而非調(diào)用者
AS $$
  SELECT row_to_json(profiles) FROM profiles WHERE id = auth.uid();
$$;
第五步:別忘了 Storage 存儲(chǔ)桶

即便表鎖死了,如果 Storage Bucket 設(shè)為 Public,里面的文件依然是裸奔的。建議針對(duì)文件夾做 RLS:

-- 只允許用戶(hù)上傳到自己的文件夾
CREATE POLICY "user_folder_only" ON storage.objects
  FOR INSERT WITH CHECK (
    auth.uid()::text = (storage.foldername(name))[1]
  );
我的安全 CheckList

每次項(xiàng)目上線(xiàn)前,我會(huì)掃一遍清單:

  • 所有表都開(kāi)啟了 RLS
  • 策略里全部使用auth.uid()
  • service_rolekey 只存在于服務(wù)端的.env
  • .env已經(jīng)加到了.gitignore
  • 在 Supabase Dashboard 的 Policy 模擬器里測(cè)過(guò)anon權(quán)限
  • 對(duì)敏感表禁用了 Realtime 實(shí)時(shí)訂閱
結(jié)語(yǔ)

記住 Supabase 安全的黃金法則:把你的anon key當(dāng)成完全公開(kāi)的東西。你的安全模型必須完全建立在 RLS 策略和數(shù)據(jù)庫(kù)函數(shù)上。

如果你在做測(cè)試項(xiàng)目,最快的安全方案就是:給每張表都開(kāi) RLS,但不寫(xiě)任何 Policy,直到你明確知道哪裡需要開(kāi)放。

希望這些經(jīng)驗(yàn)?zāi)軒湍惚荛_(kāi)數(shù)據(jù)外泄的坑!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
鄭麗文訪陸回臺(tái),沒(méi)收到馬英九祝福,反而是一記重拳,連戰(zhàn)再出手

鄭麗文訪陸回臺(tái),沒(méi)收到馬英九祝福,反而是一記重拳,連戰(zhàn)再出手

哄動(dòng)一時(shí)啊
2026-04-16 09:43:36
西雙版納潑水節(jié)一汽車(chē)車(chē)門(mén)及后備箱被人拉開(kāi),多人向車(chē)內(nèi)噴水,車(chē)主稱(chēng)父母全身淋濕、內(nèi)飾冒煙,汽車(chē)如檢查出問(wèn)題會(huì)報(bào)警

西雙版納潑水節(jié)一汽車(chē)車(chē)門(mén)及后備箱被人拉開(kāi),多人向車(chē)內(nèi)噴水,車(chē)主稱(chēng)父母全身淋濕、內(nèi)飾冒煙,汽車(chē)如檢查出問(wèn)題會(huì)報(bào)警

大象新聞
2026-04-16 08:45:11
人民幣狂飆1200點(diǎn)!首成全球第二結(jié)算幣,美元暴跌美財(cái)長(zhǎng)徹底急了

人民幣狂飆1200點(diǎn)!首成全球第二結(jié)算幣,美元暴跌美財(cái)長(zhǎng)徹底急了

霽寒飄雪
2026-04-16 11:44:58
昔日割據(jù)稱(chēng)王,今日跪求祖國(guó)!真主黨窮途末路,是自己埋下的死局

昔日割據(jù)稱(chēng)王,今日跪求祖國(guó)!真主黨窮途末路,是自己埋下的死局

民間胡扯老哥
2026-04-16 07:13:02
大面積閉店!深圳“奶茶一姐”為何輸給了河南草根兄弟?

大面積閉店!深圳“奶茶一姐”為何輸給了河南草根兄弟?

帥真商業(yè)
2026-04-15 18:58:55
美國(guó)真正的幕后老板現(xiàn)身了,特朗普瑟瑟發(fā)抖

美國(guó)真正的幕后老板現(xiàn)身了,特朗普瑟瑟發(fā)抖

一個(gè)壞土豆
2026-04-15 19:35:37
樓市“預(yù)言家”潘石屹再開(kāi)金口,前兩次全中,這次大概率又說(shuō)對(duì)了

樓市“預(yù)言家”潘石屹再開(kāi)金口,前兩次全中,這次大概率又說(shuō)對(duì)了

鑒史錄
2026-04-13 16:32:08
許家印當(dāng)了10年政協(xié)常委,后3年已知道即將完蛋。恒大集團(tuán)是披著“世界500強(qiáng)”外衣的金融詐騙集團(tuán)

許家印當(dāng)了10年政協(xié)常委,后3年已知道即將完蛋。恒大集團(tuán)是披著“世界500強(qiáng)”外衣的金融詐騙集團(tuán)

雪中風(fēng)車(chē)
2026-04-16 11:23:45
文章上海餐館端盤(pán)陪女兒!17歲愛(ài)馬神似馬伊琍,滿(mǎn)屏大長(zhǎng)腿太搶鏡

文章上海餐館端盤(pán)陪女兒!17歲愛(ài)馬神似馬伊琍,滿(mǎn)屏大長(zhǎng)腿太搶鏡

娛小余
2026-04-15 23:28:58
賓特杰拜勒:真主黨全殲以軍突擊隊(duì),重傷坦克營(yíng)長(zhǎng)!

賓特杰拜勒:真主黨全殲以軍突擊隊(duì),重傷坦克營(yíng)長(zhǎng)!

勝研集
2026-04-15 15:36:46
廣西壯族自治區(qū)主席580元買(mǎi)包后:崇左文旅跟進(jìn)“安利”,同款已賣(mài)斷貨

廣西壯族自治區(qū)主席580元買(mǎi)包后:崇左文旅跟進(jìn)“安利”,同款已賣(mài)斷貨

上觀新聞
2026-04-15 16:28:10
后續(xù)!孕婦200買(mǎi)水果被老公罵:已去醫(yī)院終止妊娠 老公發(fā)怒砸東西

后續(xù)!孕婦200買(mǎi)水果被老公罵:已去醫(yī)院終止妊娠 老公發(fā)怒砸東西

小鋭?dòng)性?huà)說(shuō)
2026-04-14 08:37:44
采訪了100個(gè)娶了小三的男人,他們幾乎都說(shuō)了同一句話(huà),讓人恍然

采訪了100個(gè)娶了小三的男人,他們幾乎都說(shuō)了同一句話(huà),讓人恍然

千秋文化
2026-04-15 20:18:32
國(guó)外小孩cos《龍珠》弗利薩用錯(cuò)涂料洗不掉成永久皮膚

國(guó)外小孩cos《龍珠》弗利薩用錯(cuò)涂料洗不掉成永久皮膚

3DM游戲
2026-04-16 13:27:14
信仰不是法外之地,全國(guó)開(kāi)始雷霆出擊整頓寺廟

信仰不是法外之地,全國(guó)開(kāi)始雷霆出擊整頓寺廟

卷史
2026-04-16 08:06:56
開(kāi)拓者約談楊瀚森,引發(fā)震動(dòng)!老板勃然大怒,全員整頓!

開(kāi)拓者約談楊瀚森,引發(fā)震動(dòng)!老板勃然大怒,全員整頓!

劉哥談體育
2026-04-16 11:30:39
哭了!馬龍、許昕緊急回歸!樊振東棄賽

哭了!馬龍、許昕緊急回歸!樊振東棄賽

最?lèi)?ài)乒乓球
2026-04-16 00:13:05
伊朗總統(tǒng):美國(guó)是想先把我們拿下,然后再去和中國(guó)交手

伊朗總統(tǒng):美國(guó)是想先把我們拿下,然后再去和中國(guó)交手

觀察者網(wǎng)
2026-04-16 10:20:11
趙子琪發(fā)文喊話(huà):“是逼我爆所有的料嗎?”

趙子琪發(fā)文喊話(huà):“是逼我爆所有的料嗎?”

韓小娛
2026-04-16 08:18:39
河南萬(wàn)歲山武俠城演出中“大象”露出人腳,景區(qū):沒(méi)飼養(yǎng)過(guò)大象,是4名工作人員扮的

河南萬(wàn)歲山武俠城演出中“大象”露出人腳,景區(qū):沒(méi)飼養(yǎng)過(guò)大象,是4名工作人員扮的

環(huán)球網(wǎng)資訊
2026-04-16 11:29:34
2026-04-16 15:47:00
教你畫(huà)像素畫(huà) incentive-icons
教你畫(huà)像素畫(huà)
像素畫(huà)教程
2428文章數(shù) 12215關(guān)注度
往期回顧 全部

科技要聞

39.98萬(wàn)!小鵬GX預(yù)售“純電增程同價(jià)”

頭條要聞

特朗普稱(chēng)訪華行程不會(huì)受伊朗戰(zhàn)事影響 外交部回應(yīng)

頭條要聞

特朗普稱(chēng)訪華行程不會(huì)受伊朗戰(zhàn)事影響 外交部回應(yīng)

體育要聞

很快,亞洲籃球要有自己的NCAA了?

娛樂(lè)要聞

絲芭傳媒創(chuàng)始人王子杰去世,享年63歲

財(cái)經(jīng)要聞

一季度GDP,5.0%!

汽車(chē)要聞

空間大五個(gè)乘客都滿(mǎn)意?體驗(yàn)嵐圖泰山X8

態(tài)度原創(chuàng)

房產(chǎn)
手機(jī)
藝術(shù)
游戲
公開(kāi)課

房產(chǎn)要聞

業(yè)主狂喜!??诙址?jī)r(jià),終于漲了!

手機(jī)要聞

屏幕與外觀齊曝光,這樣的小米18 Pro喜歡嗎?

藝術(shù)要聞

張大千『 花菓薈萃冊(cè)』

索尼新專(zhuān)利曝光:可扭曲、擠壓、捏變形的PS手柄

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版