V2 模型如何防盜連
WordPress 後台 → Live2D 設定 → 基本設定 → API 方式 決定模型從哪裡載入、防盜連由誰擋。本頁只講「自訂新版模型」(V2 / Cubism 4+)的兩種方式:直連載入 與 託管到本站。
V1 模型不走這一頁。 V1 模型本身就由外掛本機 REST 介面(
/wp-json/live2d/v1/model/*)發出,不需要再加一層防盜連。本頁所有內容只針對 V2 模型。
選項 A:直連載入(適合已經在用物件儲存 / CDN 的站長)
這種模式下外掛不動你的 modelAPI,把它原封不動地交給瀏覽器去載入。防盜的事交給物件儲存或 CDN 自己擋。常見三種做法(從簡單到複雜):
1. 公共讀 + Referer 白名單(最簡單)
- 阿里雲 OSS:Bucket → 資料安全 → 防盜連,把你的網站網域加進白名單。
- 騰訊雲 COS:儲存桶 → 安全管理 → 防盜連設定,操作類似。
- 原理:瀏覽器載入模型時會帶 Referer,不在白名單的來源直接 403。
- 限制:稍微懂封包擷取的人能偽造 Referer 繞過。日常用夠了。
2. 套一層自家 CDN,開 URL 鑑權
在 OSS 前面套阿里雲 CDN / 騰訊雲 CDN / Cloudflare,開啟「URL 鑑權」或「Token 校驗」,再把 modelAPI 填成帶簽章地址。這種比純 Referer 嚴,但設定稍複雜。
3. 私有讀 + 簽章連結(最嚴格)
Bucket 設成私有,每次存取都帶簽章才能下載。這種模式不能直接在外掛設定頁裡設定,需要懂 PHP 的人在主題 functions.php 裡寫程式動態產生簽章 URL。本外掛 不內建 任何具體雲端廠商 SDK,原因見 FAQ。
選項 B:託管到本站(推薦 / 適合沒法配防盜連的來源)
選這個之後,模型檔案會被儲存到你自己的 WordPress 網站(wp-content/plugins/live-2d/model/{slug}/),並對外只露出一個加密過的暫時簽章 URL:
- 訪客 F12 看到的也是這個暫時 URL,不會暴露源站位址。
- 每個檔案有別名(hash 化路徑),別人猜不到。
- 2026-05 之後只支援 站長手動觸發下載或上傳,不再有訪客存取時的「自動延遲下載」。
選了「託管到本站」之後表單怎麼變
選這一項後,modelAPI 輸入欄會自動隱藏,系統會把它強制寫成本站的 wp-content/plugins/live-2d/model/ 根位址。站長唯一需要填的就是 modelDir 列表,每行寫一個 slug(= 子目錄名),外掛會按 {root}{slug}/{slug}.model3.json 的固定範本自動展開成完整的 manifest URL。
例如要載入 haru / Pio / shizuku 三個模型:
modelDir:
- haru
- Pio
- shizuku
外掛會自動展開為:
https://your-site.com/wp-content/plugins/live-2d/model/haru/haru.model3.json
https://your-site.com/wp-content/plugins/live-2d/model/Pio/Pio.model3.json
https://your-site.com/wp-content/plugins/live-2d/model/shizuku/shizuku.model3.json
實際訪客拿到的 URL 都是 /wp-json/live2d/v2/m/{token}/{alias}?e=&s= 這樣的暫時簽章鏈路,源站再被改成 404 或防盜都不影響。
方式 1:從 URL 下載(模型已經有公開 URL)
- 把「API 方式」切到 自訂新版模型 · 託管到本站,儲存。
- 頁面下方會出現「模型託管」面板,預設在「從 URL 下載」tab。
- 在「模型來源 URL」輸入欄填模型的
.model3.json完整公開 URL(比如https://example.com/haru/haru.model3.json),點「下載到本站」。 - 外掛會從 URL 衍生出 slug(比如
haru),立刻把它 追加到上方modelDir列表,同時把整套模型檔案排入佇列,後台 cron 抓取到model/haru/。 - 所有 job 狀態變成「已快取」後,前台就走本機副本了。記得點頁面底部「儲存設定」,modelDir 才會寫入資料庫。
方式 2:上傳資料夾(模型只在本機)
- 把「API 方式」切到 自訂新版模型 · 託管到本站,儲存。
- 切到「模型託管」面板的「上傳資料夾」tab,把整個模型目錄(包含
.model3.json+.moc3+ 貼圖 + 動作)拖到虛線框,或點擊「選擇資料夾」按鈕選目錄。 - 外掛按相對路徑串列上傳到
model/{slug}/(slug 自動取你拖入的根目錄名),進度條即時反映已上傳位元組。 - 上傳完成後 slug 會 自動追加到上方
modelDir列表。 - 頂部黃色橫幅會顯示 目前伺服器單檔案上傳上限(由 PHP
upload_max_filesize決定)。超過該上限的檔案會被紅色標記跳過,不會讓 PHP 後台靜默丟包。如果模型貼圖普遍偏大,需要聯繫主機商或在wp-config.php/.htaccess調高upload_max_filesize與post_max_size。 - 上傳完成後記得點頁面底部「儲存設定」,modelDir 才會寫入資料庫。
典型適用場景
- 模型放在 GitHub Pages / GitHub Raw / jsDelivr。
- 模型放在朋友的伺服器,沒法讓對方加 Referer 白名單。
- 購買了第三方付費模型,對方只給一個公開 URL,你不希望被白嫖。
- 擔心物件儲存「按流量計費」帳單失控。
- 模型只在本機(沒有任何公開 URL),想直接拖進去就完事。
FAQ
為什麼外掛不直接幫我接 OSS 私有讀?
經常有人問「為啥不能讓外掛自己拿我的 OSS AccessKey 去簽章轉發?」三個原因:
- AccessKey 不能存資料庫。 WordPress 的設定項目是明文存的,萬一資料庫洩漏(被駭、備份外洩、共用主機出事),你的整個 OSS Bucket 就全沒了,比模型被盜嚴重得多。
- 每家雲的簽章演算法都不一樣。 阿里雲、騰訊雲、AWS、Cloudflare R2、MinIO 各搞一套。做完一家就有人提「加 XX 雲支援」,沒完沒了。
- 真要用的人不需要外掛幫忙。 能搞定 OSS 私有讀的站長,自己寫幾行 PHP 比點設定頁方便得多,也更安全(憑證可以走環境變數,不進資料庫)。
想自己改程式接 OSS 簽章連結?
目前外掛 沒有提供專門的鉤子 給你攔截這個流程。如果實在想改,只能 fork 倉庫,去 src/live2d-V2Api.php 裡改 get_asset() / stream_local() 這兩個函式,讓它在命中你的私有 OSS 路徑時返回一個 302 跳轉到 OSS 預簽章地址。
如果以後用這個功能的人多了,會考慮加一個正式的 live2d_v2_resolve_alias 鉤子,但 外掛本身永遠不會內建任何具體雲端廠商的 SDK。
如果你真打算這麼幹,請務必:
- 用最小權限的子帳號(只給「讀取物件」權限,限定到具體 Bucket / 目錄)。
- 千萬不要把 SecretKey 直接寫進 WordPress 設定項目裡,用環境變數或專門的金鑰管理服務。
- 對外掛的 V2 防盜連 REST 路徑加上 Referer 校驗(在
wp-config.php中明確開啟,參考live2d-V2Api.php註解)。