我在基於Html/Javascript的Web應用程序上使用了一些全局變量。我在頁面(或其中的一部分)上使用這些變量,有時它們被用作ajax調用的發佈數據。我的問題是:這有多安全?當然,我可以爲這些變量設置不同的值(例如使用控制檯),然後依賴於這個變量的調用被創建。想象一下,用戶設置了一些與他甚至無法訪問的內容相對應的Id。javascript全局變量 - 保護
這應該怎麼做?
在此先感謝
我在基於Html/Javascript的Web應用程序上使用了一些全局變量。我在頁面(或其中的一部分)上使用這些變量,有時它們被用作ajax調用的發佈數據。我的問題是:這有多安全?當然,我可以爲這些變量設置不同的值(例如使用控制檯),然後依賴於這個變量的調用被創建。想象一下,用戶設置了一些與他甚至無法訪問的內容相對應的Id。javascript全局變量 - 保護
這應該怎麼做?
在此先感謝
從安全角度來看,這與任何Web應用程序沒有什麼不同。
從瀏覽器發送的任何內容必須被服務器視爲不可信。這包括URL參數,表單發佈數據,cookie,http頭和任何由javascript控制的內容。所有這些項目都可以被攻擊者操縱。
本質上,客戶端中的值無關緊要,當他們以新的HTTP請求(包括XHR)的形式訪問服務器時,您只需要擔心它們。在此之前,具有不良值的變量不會造成任何損害。
確保您的服務器可以正確認證當前用戶,並且只允許他們訪問他們有權執行的數據和操作。確保從瀏覽器接收到的所有數據都被檢查爲正確的(如果已知)或正確的數據類型,並在預期的範圍內,拒絕數據並在沒有數據時中止。
這是唯一正確的答案。其他專注於Javascript解決方案或瀏覽器安全的人似乎忘記了OP的應用程序很容易受到來自欺騙所有必要數據的命令行卷曲的攻擊。如果curl受到保護(爲什麼?),我們可以用任何有用的腳本語言來做到這一點,這將是微不足道的 –
如果你使用jquery,您可以使用 $.data()
有了這個,你可以用一個元素的數據相關聯,因此未授權用戶將不能訪問它
如果我自己寫Javascript函數發送任何我想要的東西,你會怎麼做? Cheekysoft的回答更好地描述了這種情況。 – duri
不正確。攻擊者可以在地址欄或控制檯中執行JavaScript網址。或者只是打開一個javascript調試器,比如firebug,並更改所有的變量值,不管它們是全局變量,本地變量還是jQuery元數據。 – Cheekysoft
我會使用單例模式來管理全局數據。隱藏這些變量作爲私人成員,只暴露getter。 – ComfortablyNumb
Javascript具有運行時類型標識(一切都是類似visual basic的var),它是一種鬆散類型的語言。
JavaScript也有它自己的安全模型雖然
無法保護您的JavaScript文件的來源,或者甚至是保護它,因爲這是更好的服務器端完成。
即使加密或解密不工作,因爲在某種程度上,你需要告訴你的用戶的關鍵
更糟的是,JavaScript可以自行修改在運行時 - 而且經常。這意味着安全威脅可能不在語法或代碼中,但可能會在腳本執行後出現。
沒有JavaScript代理可以解析和拒絕惡意腳本,也沒有任何解決方案可以主動掃描JavaScript代碼漏洞,而且無法解決問題。這意味着我們不得不依靠瀏覽器開發人員來編寫一個優秀的瀏覽器,並提供我們喜歡的所有功能,而且還要考慮到安全性。
「想象一下,用戶設置了一些與他甚至無法訪問的內容相對應的Id。」這是服務器端驗證起作用的地方。如果他們沒有訪問權限,服務器應該知道這一點,並在做操作前檢查它! – epascarello
正確...我沒有放棄服務器端驗證。只爲客戶端設置一些額外的掩飾:)謝謝 – jose