寫前端程式的人,最怕的就是辛辛苦苦刻出來的程式碼,被人按個右鍵就整碗端走。我常常在想,網路上的資源雖然是開放的開,但總不能讓人直接把家底都搬走吧?前端代碼防盜這個話題,說大不大,說小不小,但對於很多獨立開發者或小型團隊來說,這可是關乎飯碗的大事。很多人第一個念頭就是想到加密,像圖片裡那種HTML代碼加密工具,確實能防君子不防小人,但對於那種好奇,但遇到真懂技術,可能就有點不夠看了。
加密的迷思:靜態頁面真的能鎖住嗎?
其實,HTML、CSS和JavaScript,這些東西最終都要在瀏覽器上執行。瀏覽器要看得懂,它就得是「明文」的。那些所謂的加密工具,很多只是把文字編碼或混淆一下,像是把「Hello World」變成「u0048u006…」這種鬼樣子。瀏覽器在解析的時候,還是得把它們解開。所以,這種加密,說白了就是增加一點「閱讀難度」。對於那種只想複製一段CSS樣式的普通使用者,可能有效。但對於一個有心要盜你程式碼的開發者來說,這層級,這大概就是多花五分鐘用瀏覽器開發者工具,或是用個線上反解碼工具就能解決的事。我自己就試過,有些加密工具產生的代碼,跑起來效能還會變差,這就有點得不償失了。
真正實戰策略:從「防複製」到「防盜用」
既然靜態加密有它的極限,那我們該怎麼辦?我個人的經驗是,不要執著於「完全防住何人都不能複製」,而是要想辦法讓「複製過去的代碼失去價值」。比如說,你可以把核心的業務邏輯寫在後端API,前端只負責展示的只是一個呼叫結果。這樣,就算對方把你整個前端頁面搬走,他也只是一個空殼子,沒有你的後端伺服器,他什麼都做不了。再來,就是使用一些代碼混淆工具,像是 UglifyJS 或 Terser,它們不只是壓縮,還會把變數名稱改成亂碼,把函式邏輯打亂,這比單純的編碼要難解讀得多。
法律與社群:最後一道防線
除了技術手段,有時候也得借助一些非技術的力量。在程式碼的檔案開頭,加上版權宣告,或是嵌入一些不影響功能的浮水印,例如在CSS裡藏一段註解,或是用JavaScript在控制台輸出「此網站名稱版權所有」的訊息。這雖然這不能阻止技術高超的人,但至少是一個明確的宣示。萬一真的發現有人把你的作品拿去商用,這些都可以作為日後舉證的依據。而且,我發現很多時候,在社群裡公開你的作品,並清楚寫明授權條款,反而能獲得更多尊重。畢竟,前端圈子說大不大,一個開發者的名聲,往往比一段偷來的程式碼值錢多了。你覺得呢?與其花大把時間去研究如何打造一個完美的鎖,不如把精力放在讓自己的產品和服務更有價值,讓別人就算偷了你的前端代碼,也無法複製你的服務和社群價值,這才是真正無可取代的。

評論(4)
加密根本防不了懂的人,浪費時間。
後端邏輯放前面才是正解,空殼沒用。
有人試過 Terser 嗎?效能影響大不大 🤔
搞過這個,最後發現版權宣告比加密有用多了