如何防止授權碼被盜用?

Thread Source: php奇云多应用授权系统|万能在线更新页面

說到授權碼被盜用,這幾乎是每個賣源碼、賣程式的站長都會踩到的坑。你辛辛苦苦開發的系統,賣給客戶一份,結果第二天就在某個論壇看到「XX系統破解版,已去授權」。更氣人的是,有些人根本不是破解,就是單純把 authcode.php 裡那串授權碼複製出去,換個域名照樣跑得歡。所以真正要防的不只是「破解」,而是授權碼這個憑證本身被搬走、被共用。

授權碼為什麼那麼容易被搬走

原因很簡單——它就是一串明文寫在檔案裡的字串。從上面提到的流程可以看到,客戶下載安裝包時,系統會自動把 AUTHCODE、上級地址、應用標識、AUTH_BUILD 寫進模板路徑(例如 /includes/authcode.php)。這個設計很方便,但方便的另一面就是:任何拿到程式包的人,打開檔案就能看到完整授權資訊。

我見過一個比較典型的案例,某個 CMS 作者用純授權碼單一驗證,結果一個代理商買了一份,直接複製給下游三十多個網站用。作者半年後才從流量異常裡發現,那時候損失已經算不清了。

檢測方式不要只選一種

最實用的做法是「授權碼 + 域名」組合驗證,別只靠授權碼。後台改設定就能生效,通常不需要動客戶端的檢測邏輯,這點很省事。如果客戶是固定伺服器的企業用戶,再加上 IP 綁定會更穩;泛域名授權則要特別小心,因為 *.example.com 這種寫法一開就是一大片,很容易被拿去掛二級站。

還有一個容易被忽略的點:檢測邏輯放在哪。很多人隨手丟在某個 include 檔案裡,一行 require 就能註解掉。建議把檢測邏輯放進程式的核心入口,而且要加密——SG 擴充(SourceGuardian)就是為這個場景準備的。加密不是萬能,但它把破解成本從「五分鐘」拉到「幾天」,對絕大多數盜版者來說就已經夠了。

盜版追蹤要真的用起來

後台的「記錄盜版站點」功能,我覺得比想像中有價值。未授權請求命中之後入庫,你就有了一份完整的盜用清單:什麼域名、什麼時間、用的是哪個客戶的授權碼。這份資料一比對,很快能鎖定是哪個代理商外流的。

處置手段可以分級:先下發黑頁警告,再嚴重一點才考慮刪檔案、刪庫這類動作。這裡要提醒一句——刪庫刪檔案屬於不可逆操作,而且如果誤判(例如客戶剛換域名忘了報備),後果會很難看。我個人傾向只用黑頁 + 私下聯繫,除非確定是惡意分銷。

另外,處置必須靠客戶端含有最新的檢測邏輯才生效。所以版本更新推得勤不勤,直接決定你的防盜能力有多少實際作用。單檔案的 sdk/online_update.php 在這裡就派得上場,它會自動從核心檔案解析 AUTH_SERVER、AUTH_APPNAME、AUTHCODE、AUTH_BUILD,客戶點一下就更新完,你的新檢測邏輯也跟著下去了。記得把 QY_UPD_PASSWORD 改掉,別留預設口令,不然這個更新入口本身就成了漏洞。

幾個管理層面的細節

購買時要求綁定 QQ 或其他聯絡方式,看起來只是個小開關,實際上是在建立「授權碼 ↔ 真人」的對應關係。出事時你至少找得到人。

還有就是慎用「暫停檢測」。一律放行的狀態下程式能繼續跑,未授權域名仍會記入盜版庫,這在伺服器出問題時是很好的救命開關,但別忘了關回去。我聽過有站長開了之後放了兩個月……後面就不用說了。

防盜這件事,說到底沒有一勞永逸的方案。你能做的是把成本堆高、把追蹤鏈條做完整,讓盜用者覺得不值得,讓正版客戶覺得省事。這個平衡點,比任何加密技術都重要。

評論(7)

提示:請文明發言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

  • Luminous Tide 普通用户

    之前就是把 AUTHCODE 寫死在核心檔,後來被人整包搬走,看到這段有點痛

    2 個月前 Reply
  • 電池

    online_update.php 用完就刪這點真的要記牢,我到現在還躺在根目錄裡😅

    2 個月前 Reply
  • 孤獨的旅人

    請問簽章的過期時間一般設多久比較合理?太短怕客戶那邊網路不穩一直失敗

    2 個月前 Reply
  • 幸福的泡泡 普通用户

    限速加人工覆核這個方向我認同,直接刪庫太容易誤傷正版了

    2 個月前 Reply
  • 海豚妹 普通用户

    綁域名雜湊的話,客戶換主機或加 CDN 之後要怎麼處理比較順

    2 個月前 Reply
  • 土豆泥 普通用户

    客戶端終究會被逆向這句最實在

    2 個月前 Reply
  • 蕭瑟書生 普通用户

    想看更多伺服器端那塊的實作細節,nonce 要存哪、怎麼清理都想知道

    1 個月前 Reply