2012-02-21 69 views
1

有沒有辦法'隱藏'javascript對象的結構和內容?客戶端數據結構的JavaScript加密(或混淆)

我對有關用戶的UI(和其他東西),我的客戶端保持信息相當廣泛的JavaScript對象。它包含許多關於用戶將要操作的資源的信息。實際上,有Firebug的人可以打開控制檯並查看所有數據的結構。出於安全原因,我對此並不滿意。

有什麼方法可以保護這些數據嗎?

謝謝,

+4

*正確*保護這種數據的唯一方法是不讓它在客戶端。 – 2012-02-21 22:52:46

回答

1

如果這是一個安全問題,請不要發送給客戶端。即使你對它進行混淆,你也不會使它更安全。

5

不,你不能保護這些數據。任何可以被瀏覽器看到和使用的東西都可以被瀏覽者看到並用於檢查瀏覽器的功能。

你真的需要想想這是爲什麼呢,是你的問題?如果您擔心可能攔截該數據的中間人窺探者,那麼您應該通過https運行您的連接。

如果你很在意自己看到這個數據的最終用戶,我會問,爲什麼你關心嗎?這是用戶自己的狀態。那裏不應該有任何祕密。

如果您擔心用戶可能操縱簡單的事情,他們不應該被允許做您的服務器上的東西,那麼你就需要實現服務器的東西用戶不應該被允許在保護做。客戶無法實施此類保護,因爲根據定義,客戶在這方面不安全。

如果確實存在該終端用戶本身不應該有訪問客戶端上的安全數據,那麼你需要重新考慮如何您應用的工作原理,只保留在服務器上的數據。客戶端應該只有絕對需要在客戶端上的數據。如果您生成大部分UI服務器端,那麼可以在客戶端中使用非常少的實際數據來實現UI,除了正在編輯的特定字段。

因此...總之。不要把數據放在最終用戶不應該訪問的客戶端中。如果這是一個問題,請重新考慮您的應用程序的工作原理。如果最終用戶可以訪問它,那麼不要工作。如果沒有其他人可以訪問它,那麼通過https運行你的頁面。

至於模糊,這是根本不值得任何努力。混淆不能提供任何真正的安全性,因爲它總是可以被擊敗。充其量,它爲試圖查看你的代碼的人提供了一定程度的煩惱。一個堅定的黑客只需花費一點時間就可以完成混淆,並通過一些工具運行它。當然,在縮小JavaScript代碼方面沒有任何壞處,因爲它使它變得更小,並且使其不易被人讀取,但不要將其視爲任何形式的真實安全性。

1

混淆只能到目前爲止,因爲Javascript的本質是它下載到用戶的系統,以便他們的瀏覽器(和用戶)可以閱讀它。讓一些難以閱讀的東西不能完全隱藏它。沒有給用戶一些解密方法,你就無法加密它,從而破壞了目的。你正在尋找的是在用戶看到它之前編譯的服務器端語言,例如PHP,Python,Java等。

1

不,不是真的。你可以混淆,打包和做各種東西,使源代碼難以閱讀。地獄,你甚至可以給你的對象真奇怪和indescript屬性。但事實上,你只會讓閱讀變得更難。數據在那裏,如果敏感數據發送到客戶端,確定的攻擊者可以找到他想要的東西。

所以不要存儲敏感數據客戶端。無論如何,UI狀態有什麼可怕的祕密?如果用戶想要打破他的狀態,讓他?

1

我不會建議嘗試混淆javascript邏輯。
但你可以縮小它(即醜化它)。至少你會讓閱讀變得更加困難。 如果您擔心客戶端代碼的安全性,那麼只能使用服務器端代碼。也許通過服務提供更多的代碼,然後通過$ .ajax或類似的方式調用你的服務。

1

不,沒有。

但是,你有一些選擇:

  1. 您可以您的JavaScript - 因爲它使得難以閱讀和理解你的代碼,這會略微有所幫助。那裏有很多很好的混淆器。我反對這個建議!
  2. 你可以縮小你的javascript - 這可能看起來像一個混淆方法,但不是。它可以很容易地恢復到可讀的JavaScript,主要用於限制帶寬。我鼓勵這一點,但出於這個原因反對它的建議!
  3. 您可以嘗試將盡可能多的敏感數據和代碼放到服務器上。這可能是有道理的,或者它可能不是。
  4. 您可以通過您自己的JavaScript解密庫對您的數據進行加密並對其進行加密解密。不是一個好主意,因爲繞過這個安全性非常容易,而且是資源密集型的。但是,它會稍微阻止數據的「盜竊」。 我強烈建議不要這樣!
  5. 如果您可以接受僅針對Google Chrome(現在)或Chromium,則可以在Native Client中實現代碼和數據,Native Client基本上是在瀏覽器(Chromium/Chrome)的沙箱中運行的編譯C代碼。訪問您的代碼的唯一方法是反編譯。如果你對數據竊取非常偏執,你可以在編譯之前混淆你的C代碼,試圖殺死調試器搶奪你的數據,並且可能實時從你的服務器通過SSL從你的所有數據中獲取數據,而不是在二進制文件中。

雖然,請記住,即使使用選項5,也有方法可以聲明您的數據,但很少有人有意願,時間和專業知識來獲取它。

還記得,如果您正在尋找一種方法來隱藏網絡上的敏感數據,很可能您錯誤地想出了您的解決方案。永遠不要將敏感數據放在客戶端上,或使用客戶端驗證作爲唯一的驗證。也許網絡不是你正在尋找的平臺?也許你正在尋找一個分佈式解決方案?