跳至主要内容

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)

  1. 把「API 方式」切到 自訂新版模型 · 託管到本站,儲存。
  2. 頁面下方會出現「模型託管」面板,預設在「從 URL 下載」tab。
  3. 在「模型來源 URL」輸入欄填模型的 .model3.json 完整公開 URL(比如 https://example.com/haru/haru.model3.json),點「下載到本站」。
  4. 外掛會從 URL 衍生出 slug(比如 haru),立刻把它 追加到上方 modelDir 列表,同時把整套模型檔案排入佇列,後台 cron 抓取到 model/haru/
  5. 所有 job 狀態變成「已快取」後,前台就走本機副本了。記得點頁面底部「儲存設定」,modelDir 才會寫入資料庫。

方式 2:上傳資料夾(模型只在本機)

  1. 把「API 方式」切到 自訂新版模型 · 託管到本站,儲存。
  2. 切到「模型託管」面板的「上傳資料夾」tab,把整個模型目錄(包含 .model3.json + .moc3 + 貼圖 + 動作)拖到虛線框,或點擊「選擇資料夾」按鈕選目錄。
  3. 外掛按相對路徑串列上傳到 model/{slug}/(slug 自動取你拖入的根目錄名),進度條即時反映已上傳位元組。
  4. 上傳完成後 slug 會 自動追加到上方 modelDir 列表
  5. 頂部黃色橫幅會顯示 目前伺服器單檔案上傳上限(由 PHP upload_max_filesize 決定)。超過該上限的檔案會被紅色標記跳過,不會讓 PHP 後台靜默丟包。如果模型貼圖普遍偏大,需要聯繫主機商或在 wp-config.php / .htaccess 調高 upload_max_filesizepost_max_size
  6. 上傳完成後記得點頁面底部「儲存設定」,modelDir 才會寫入資料庫。

典型適用場景

  • 模型放在 GitHub Pages / GitHub Raw / jsDelivr。
  • 模型放在朋友的伺服器,沒法讓對方加 Referer 白名單。
  • 購買了第三方付費模型,對方只給一個公開 URL,你不希望被白嫖。
  • 擔心物件儲存「按流量計費」帳單失控。
  • 模型只在本機(沒有任何公開 URL),想直接拖進去就完事。

FAQ

為什麼外掛不直接幫我接 OSS 私有讀?

經常有人問「為啥不能讓外掛自己拿我的 OSS AccessKey 去簽章轉發?」三個原因:

  1. AccessKey 不能存資料庫。 WordPress 的設定項目是明文存的,萬一資料庫洩漏(被駭、備份外洩、共用主機出事),你的整個 OSS Bucket 就全沒了,比模型被盜嚴重得多。
  2. 每家雲的簽章演算法都不一樣。 阿里雲、騰訊雲、AWS、Cloudflare R2、MinIO 各搞一套。做完一家就有人提「加 XX 雲支援」,沒完沒了。
  3. 真要用的人不需要外掛幫忙。 能搞定 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 註解)。