2012-03-05 31 views
1

這是衆所周知的重寫在Javascript中的對象可能會導致安全問題,或只是發展錯誤。我很擔心這裏的安全。是否可以驗證Browser-Javascript會話的完整性?

假設我有一個敏感的JSON結果將被保存在一個變量中......並且該變量先前已用_prototypes,getter/setter定義。進一步假設,不是隻是一個內存分配,結果被髮送到一個函數發送給一個「壞人」。現在我的敏感數據在我的應用程序之外。

我的目的是找到一種方法,在給定瀏覽器內啓動會話之前,將Javascript,cookies,SOP和內存「清除」回到原始狀態。

  • 我知道我在這裏提到了一些棘手的組件,但可以進行任何清理或驗證嗎?

  • 是否可以將內存中狀態重置爲已知良好狀態?

+2

+1只是因爲它被標記爲'javascript'和'安全性'。哦謝謝。這是我的一天。 – DefyGravity 2012-03-05 01:32:20

+0

請記住,如果我問爲什麼?爲了什麼? – Joseph 2012-03-05 01:35:20

+0

@joseph - 有很多利用重新定義的getter/setter和Javascript的其他方面的漏洞利用。如果我可以重新初始化代碼,我會有一個已知的起點。有時這可能需要在會話開始時發生,有時可能需要稍後發生(例如在一段時間之後)。 – LamonteCristo 2012-03-05 01:38:45

回答

4

在分佈式計算,你必須假定客戶端是在敵人的手中(在這種情況下,這是瀏覽器)。而且他們會爲他們做任何他們想做的事情。如果您的應用程序的安全性取決於客戶端的某些代碼的正確執行,那麼它將不安全。

TL;博士:第

+0

+1。客戶端上的JavaScript沒有**安全性。沒有,納達,零。如果您希望數據保持安全,請將其保留在服務器上。 – RobG 2012-03-05 02:38:23

+0

刷新頁面(如果發生錯誤)修復*任何* *? – LamonteCristo 2012-03-05 02:41:43

-3

您可以檢測,如果變量有一個getter/setter並假定它是髒的,如果真:

var data = {hacked:1}; 

if(Object.getOwnPropertyDescriptor(data, "hacked").value === data.hacked) { 
    //clean 
} 
0

安全領域的第一個問題是:什麼是你的威脅模型?當有人問你這個問題時,這暗示你沒有想過你試圖抵禦的威脅。如果你沒有想到通過,你就無法構建有效的防禦。

你的問題沒有解釋威脅模型。你想捍衛什麼?你擔心在你的頁面上運行惡意JavaScript?

如果這是威脅,最好的答案是不要問這個問題。最好的解決方案是確保您永遠不會在惡意JavaScript正在您的頁面上運行的情況下結束。也許你需要XSS防禦,以確保沒有人可以向你的頁面注入惡意JavaScript。也許你需要一個安全的Javascript沙箱(如Caja,MS Web Sandbox,Caja,ADsafe,FBJS,...),如果你確實需要從不受信任的源代碼運行Javascript,以限制Javascript可以做的事情。我不知道我們怎麼說;你沒有提供足夠的信息來解決你的問題。

作爲一般的經驗法則,您需要牢記客戶端執行平臺由客戶端控制,而不是您。因此,你不能相信客戶。如果您擁有客戶端不應該知道的機密數據,不會將其發送給客戶端!不要讓客戶端的Javascript看到它。如果違反此規則,則不會進行重置或重新刷新或重新加載數據,從而節省您的時間。

如果一個安全的Javascript沙箱是你所需要的,請務必在IT閱讀這些問題,安全堆棧交換:

你可能會得到有關IT安全性的更好答案。

相關問題