2011-09-06 52 views
1

我想知道是否有可能在訪問網站時隱藏JavaScript文件。在第一時間,我認爲這是不可能的,你可以儘可能地混淆代碼,但它仍然可以被用戶訪問。這個網站定義了哪些javascript函數?

但是,我開始閱讀一些博客文章和網站,建議一些黑客試圖隱藏js代碼。一些職位我讀到哪裏論文:

http://www.webmasterworld.com/forum91/2713.htm

http://www.codingforums.com/archive/index.php/t-23293.html

我不明白他們很好。有人可以向我解釋嗎?

這裏是一個例子:我一直在瀏覽這個頁面http://www.regexbuddy.com/,我開始用谷歌瀏覽器查看源代碼,以瞭解如何實現顯示菜單下拉列表的功能。我可以看到每個菜單項都有一個onmouseover =「showpopup(x);」事件。不幸的是,我無法找到這個js函數「showpopup」,整個代碼中都沒有使用其他javascript函數(例如showmenu)。服務器發送2個javascript文件menu.jsjgsoft.js但這些文件都不包含函數定義。這些函數既沒有在html中定義爲內聯腳本。

奇怪的是,如果在谷歌控制檯中輸入window.showpopup我可以讀取函數。那麼這些函數在哪裏定義?可能的黑客試圖隱藏JavaScript文件?如何繞過這些黑客?

+2

在第一個評論中的第二個評論總結得非常好:**顯然,有一些解決方法,因爲瀏覽器必須閱讀它。** – Blender

+2

這有點像過去禁用右鍵單擊的人以「保護他們的源代碼」 - 對於真正想要獲得代碼的人來說,這是一個煩惱和輕微的不便,但是如果瀏覽器需要執行它,那麼可以找到它。迷惑是你最好的選擇。 – mwan

+0

恕我直言,真正混淆(或保護)JavaScript代碼的唯一方法是使用單向轉換來處理它,這使得幾乎不可能將其轉換回原始形式。 Closure Compiler的優化高級模式可以實現這一點。 –

回答

1

對於regexbuddy.com - 代碼全部在this file中,正如您猜測的那樣,但它使用packer打包。這可能是爲了儘快提供,而不是讓閱讀困難,但這可能是兩個原因。

您可以通過將jgsoft.js的內容粘貼到this tool中將其「解包」。

所以基本上 - 是的,你可以隱藏所有的代碼,但由於瀏覽器必須執行它,它總是可以得到。

0

下面是一個標準的黑客對您 -

document.write(
    '<scr' + 'ipt type="text/javascript">function fo' + 'o(){alert("hello!");}'); 

嘗試搜索來源爲foo() :)

最終,劇本總是存在 - 因爲JavaScript的解釋(即腳本)的語言中,必須在某個時刻加載源代碼裸露的才能執行。它可能會被混淆,但它必須在那裏。

所以,不,你不能'隱藏'javascript源代碼 - 你可以讓它很難找到。一般來說,調試+分步是答案;如果你有耐心。

1

Javascript的eval()函數將字符串作爲參數,將該字符串的內容解析爲javascript源代碼,並在調用上下文中執行它。這通常是這種混淆代碼的核心。

在您的示例頁面上,文件jgsoft.js包含JavaScript,該JavaScript在執行時會生成一個字符串,其中包含所需功能的定義,然後使用eval()來執行該功能,從而定義這些功能。

如果您第一次瀏覽函數並在相關位置添加換行符/空格,可以使用Javascript調試器,讓您逐行執行逐行執行並查看執行狀態,如Firebug,以觀察過程。

在這種情況下,打包似乎已經完成,使文件更小,而不僅僅是混淆。一般來說,JavaScript混淆是毫無意義的:如果您的瀏覽器可以看到它,那麼您也可以。

相關問題