2016-01-05 40 views
3

我一直在評論我可以找到關於在JavaScript網頁的客戶端使用eval()的安全含義的線程。客戶端用於運行不可信代碼的JavaScript eval()

我正在實現一個網站,該網站應該允許用戶運行他們自己的代碼(寫在頁面上)並在同一頁上的另一個div上看到一些可視結果。基本上,我希望用戶能夠編寫有效的JavaScript代碼,並讓它在同一頁面上操作畫布。

沒有必要對代碼進行服務器端評估。

我曾看過Jailed和Caja,但我認爲他們可能會增加不需要的額外複雜度。

我明白,做這類事情的方式是在有我的代碼庫的其他部分沒有訪問權限的「沙箱」,然而,我的需求是這樣的,我不能真正定義一個簡單的API提供安全的入口/出口點...我希望用戶能夠使用任何JavaScript代碼,我不想寫一個將提供API的解釋器。

由於不需要服務器端評估,並且應該只有一個用戶在Web會話中執行自己的代碼,使用eval()是否安全?

+4

除非該代碼與其他用戶共享,這可能導致cookie被竊取或其他一些不良行爲,我認爲它可能是安全的,或者至少它可能會損害用戶會話 – alex88

+1

您的eval方法與jsfiddle.net一樣安全,但在跨瀏覽器方式中捕獲拋出的錯誤(js的異常版本)時會遇到問題,並顯示導致錯誤的行。不是爲了安全性,但是對於捕獲的錯誤問題,您可能需要考慮創建腳本標記或iframe並在其中執行代碼,但是......這不是您所問的:p – hanshenrik

回答

3

如果您的邏輯中沒有允許一個人發佈供其他人使用的代碼的路徑,那麼您可以按原樣使用eval()

您的情況與任何具有瀏覽器和開發工具的用戶無異,他/她可以運行他們想要的任何代碼。

相關問題