首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Applet防盜鏈保護:基於DocumentBase域名驗證機制

     編輯:Java 相關知識

Applet部署在Web頁面中,雖不像圖片可直接「另存為」,但熟練用戶仍可從瀏覽器緩存提取.class文件。通過驗證getDocumentBase()返回的域名,可實現基礎的運行環境綁定保護。

核心防護代碼


import java.applet.Applet;
import java.net.URL;

public class ProtectedApplet extends Applet {
    private static final String ALLOWED_HOST = "www.mydomain.com";
    
    @Override
    public void init() {
        // 獲取載入Applet的HTML頁面URL
        URL docBase = getDocumentBase();
        String host = docBase.getHost();  // 僅獲取主機名,不含端口/路徑
        
        // 域名驗證(不區分大小寫)
        if (!ALLOWED_HOST.equalsIgnoreCase(host)) {
            // 記錄安全日誌
            System.err.println("SECURITY ALERT: Unauthorized hosting detected!");
            System.err.println("Expected: " + ALLOWED_HOST);
            System.err.println("Actual:   " + host);
            System.err.println("Full URL: " + docBase);
            
            // 拒絕初始化
            throw new SecurityException("Applet只能在授權域名運行: " + ALLOWED_HOST);
        }
        
        // 正常初始化邏輯
        initializeGame();
    }
    
    private void initializeGame() {
        // 遊戲初始化代碼
    }
}

驗證邏輯詳解

方法返回值用途
getDocumentBase()URL包含Applet的HTML頁面完整URL
getCodeBase()URLApplet.class文件實際下載地址
getHost()String僅主機名(如www.example.com)
getPort()int端口號(-1表示默認端口)

進階防護策略

1. 多域名白名單


private static final Set ALLOWED_HOSTS = Set.of(
    "www.mydomain.com",
    "game.mydomain.com",
    "localhost",      // 開發環境
    "127.0.0.1"
);

// 驗證
if (!ALLOWED_HOSTS.contains(host)) { ... }

2. 子域名通配匹配


private static final String ROOT_DOMAIN = ".mydomain.com";

boolean isAllowed = host.equals("mydomain.com") || host.endsWith(ROOT_DOMAIN);

3. 簽名驗證雙重保障


// 檢查代碼簽名證書
Certificate[] certs = getClass().getProtectionDomain().getCodeSource().getCertificates();
if (certs == null || !verifyCertificate(certs[0])) {
    throw new SecurityException("未簽名或簽名無效");
}

局限性與繞過風險

  • 反編譯修改:攻擊者可反編譯移除驗證代碼後重新打包
  • Hosts文件劫持:本地修改hosts將惡意域名解析到授權IP
  • 代理/繼承繞過:惡意頁面通過<iframe>或繼承繞過檢查

現代替代方案

Applet技術已淘汰,現代Web應用保護策略:

  • CORS策略:服務端設置Access-Control-Allow-Origin限制調用源
  • Referer檢查:驗證HTTP Referer頭(可偽造,作輔助)
  • Token綁定:頁面生成一次性Token,Applet/JavaScript請求攜帶驗證
  • 代碼混淆+完整性校驗:ProGuard混淆+啟動時校驗JAR簽名/哈希

域名驗證屬於「誠實用戶」防護,對抗惡意提取需結合代碼簽名、混淆、服務端授權等多層防禦體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved