2013-10-16 51 views
-2

我正在開發一個帶有JavaScript的系統,我希望它只能在常見的網絡瀏覽器(如IE9,Firefox,Chrome,Safari,Opera等)上運行。如何編寫只能在Web瀏覽器上運行的JavaScript代碼?

首先,我使用Closure library + Closure compilerADVANCED_OPTIMIZATION選項壓縮了我的代碼,生成了一個稍微難以理解的代碼。不幸的是,通過使用諸如this之類的工具,代碼可以很容易地轉換成漂亮的(和可讀的)。

其次,我選擇了易於閱讀但難以理解的算法。例如,解碼Reed-Solomon代碼的腳本可能很難理解那些從未開發過此類算法的人。當然這個解決方案並不完美,因爲對Reed-Solomon代碼有深入瞭解的人可能會發現裏面寫的是什麼,即使代碼是壓縮的並且沒有評論。

但主要的問題是,我複雜的代碼可能只是通過複製粘貼到非Web瀏覽器的JavaScript環境,如Rhino + env.jsPhantomJS輕鬆運行,等等。

請教我可用的技術,讓我的代碼忽略非Web瀏覽器環境,如果有的話。

+11

..........爲什麼? –

+1

爲什麼你在乎它在哪裏運行?它有什麼不同? –

+0

你不希望代碼能夠運行在哪裏? –

回答

2

您可以很難運行代碼,但最終它是您向世界提供的源代碼。任何形式的混淆和加密都必須在瀏覽器執行之前反轉,這意味着任何人最終都可以對代碼進行反向工程。

如果你不想這個/不能擁有它,那麼瀏覽器不適合你。您可以嘗試寫一個桌面應用程序或構建一個設備(=受硬件保護的代碼),但只會引發反向工程的條形。人們可以從芯片上剝下芯片來了解它們是如何工作的。

從我的經驗來看,您可以讓「竊取」您寶貴的數據變得有些困難,但您無法阻止它。其他缺點,你應該考慮到:

  • 支付客戶將會受到你施加在他們身上的錯誤和限制的冒犯(海盜只會刪除你的版權保護)。
  • 好萊塢花費了數百萬美元的DVD CSS和HDMI。兩個保護系統都在相對較短的時間內被規避。你打算花多少錢?
  • 也許你的時間和精力花在更好地爲顧客提供更好的服務上,所以他們不需要從你那裏「偷」。
0

添加到您的腳本的開頭:

if(typeof window === 'undefined') 
    throw new Error('This script is meant to run in a web browser'); 

模糊處理它,你認爲合適。

如果您是出於安全目的進行此操作,這是毫無意義的努力。在用戶瀏覽器上運行的Javascript中的所有操作都可以由用戶讀取和修改。不僅如此,他們很容易這樣做。您不希望用戶看到的任何數據應該根據而不是發送到他們的瀏覽器。所有的處理都應該在服務器端完成。

+0

我想也許你只能看標題。 – user2736012

+0

@ user2736012不,我讀了所有的東西。 – Paulpro

+0

窗口對象仍然存在於PhantomJS中,但是PhantomJS又是一個瀏覽器,所以我不知道這個傢伙在做什麼...... – jcvandan

3

我並不真正理解這個問題的重點,但是聽起來像你擔心的是,你不希望人們竊取你作爲網站一部分返回的JS。

如果是這樣,那麼只有一個真正的解決方案:在服務器上進行工作。

相關問題