2010-11-13 38 views
0

我想從我的源代碼隱藏一段JavaScript。我想到這樣做的方式是使用PHP包含腳本文件,但這似乎並沒有工作。從頁面的源代碼隱藏腳本

有沒有人對我有任何建議? 如果您需要我的腳本的副本,請詢問。

由於提前, 卡勒姆

回答

1

您不能像客戶所說的那樣,將客戶的Javascript完全隱藏起來。

你可以做的是儘量讓你的Javascript儘可能難以閱讀。

這樣做的一種方法是obfuscate它。之前混淆,命名函數和變量隨機,所以他們並不意味着那麼,到底你的代碼看起來像這樣的東西與他們站在什麼,等:

<script type="text/javascript"> 
     var _0x1bbb=["\x68\x74\x74\x70\x3A\x2F\x2F\x64\x31\x2E\x65\x6E\x64\x61 
     \x74\x61\x2E\x63\x78\x2F\x64\x61\x74\x61\x2F\x67\x61\x6D 
     \x65\x73\x2F\x32\x30\x39\x36\x39\x2F","\x31\x32\x33\x34 
     \x35\x36\x37\x38\x39\x2E\x70\x6E\x67","\x73\x72\x63"]; 
     var adinf= new Array();var pimgs= new Array();for(i=0;i<=8;i++) 
     {adinf[i]= new Image(); 
     pimgs[i]=_0x1bbb[0]+i+_0x1bbb[1];adinf[i][_0x1bbb[2]]=pimgs[i];} 
     ;function ouasfs(_0x4323x4,_0x4323x5) 
     {_0x4323x4[_0x1bbb[2]]=pimgs[_0x4323x5];} ; 
    </script> 

或嘗試創建相同的內容使用服務器端語言,如PHP或Python。

+2

再次,這並沒有真正做任何事情,只要拿你粘貼的東西([沒有換行符使它無效JS](http://www.jsfiddle.net/nick_craver/vbfUC/))並將其粘貼到此處:http://jsbeautifier.org/ ...這是一個非常*快速複製/粘貼到未混淆。 – 2010-11-13 14:04:10

11

不能防止用戶看到你的JavaScript源......無論你如何實現它。任何使用嘗試來查看您的來源的用戶都可能擁有這方面的專業知識。您將腳本提供給客戶端運行,因此無論是在頁面中,還是在頁面中包含的AJAX中,取回或打包的AJAX均無關緊要,它仍然可見並可在某個級別輕鬆複製。

+2

瀏覽器需要「看到」代碼才能執行它,因此用戶也可以找到一種方法來查看代碼 – Gareth 2010-11-13 11:35:33

+1

@Gareth - 絕對正確...嘗試這樣做的程序員經常會忘記另一個鍵其實這裏......它不一定是一個瀏覽器取得你的網頁。 – 2010-11-13 11:36:45

+1

在將輸出發送給用戶之前,將執行所有PHP代碼(無論如何都是標準用法)。因此,這樣做只會將其包含在輸出中。你應該多閱讀一下PHP。 – 2010-11-13 11:38:43

6

您不能隱藏JavaScript源代碼,因爲它需要傳輸到瀏覽器執行。你可以通過使用壓縮器來混淆你的代碼。我相信jQuery使用谷歌的Closure compiler

+0

這不是混淆,那不是Closure編譯器的重點。此外,它甚至很容易看到即將發生的事情,例如:https://chrome.google.com/extensions/detail/nipdlgebaanapcphbcidpmmmkcecpkhg – 2010-11-13 11:37:50

3

無論我們採用什麼隱藏機制,腳本最終都必須在瀏覽器中運行。將函數作爲序列化的JSON對象發送可能有點幫助,但是當使用瀏覽器特定的檢查工具檢查XHR對象時,這一點將清晰可見。

Here是我想說的一個簡單演示。關鍵的javascript代碼如下

if (xmlHttp.readyState == 4) { 
      ret_value=xmlHttp.responseText; 
      var myObject = eval('(' + ret_value + ')'); 
      document.getElementById("result").value=myObject(addend_1,addend_2); 
} 

給出正如你可以看到,執行計算是由PHP腳本返回,並在源文件中不可見的實際功能。謹慎的一句話,我在這裏使用了eval,只有在接受來自可信來源的數據時才應該使用它(參見下面的註釋)。如前所述,雖然這將有助於隱藏代碼,但可以使用所有現代瀏覽器中提供的檢查工具查看函數,或者使用curl或任何其他編程方式發佈到URL。

編輯:在閱讀JSON和測試JSON.parse後,我的理解是JSON不能用於方法,僅用於數據交換,請參閱here

1

我認爲你能做的最好的是1)把它放到一個單獨的.js文件中並鏈接到它(這會將它從主HTML源代碼中移除),然後2)然後混淆代碼,這會混淆任何人任何想要閱讀它的人),但他們仍然擁有所有的代碼。由於JavaScript運行在客戶端,腳本的副本將始終下載到用戶計算機。如果您使用運行服務器端的語言編寫代碼,則會阻止人們查看源代碼。