我正在做的是創建一個真值表生成器。使用用戶提供的函數(例如a && b || c
),我試圖讓JavaScript顯示a,b和c的所有組合以及函數的結果。如何讓用戶安全地輸入JavaScript函數?
問題是我不完全確定如何解析用戶提供的功能。用戶可以基本上把他想要的所有東西放在一個函數中,這可能會改變我的網站的效果。
eval()
根本不安全;既不是new Function()
,因爲兩者都可以讓用戶把所有的東西放在他喜歡的功能。通常JSON.parse()
是eval()
的一個很好的選擇,但是JSON中不存在函數。
所以我想知道如何將一個像a && b || c
這樣的自定義布爾運算符字符串解析爲函數,而忽略任何惡意代碼字符串。函數內只允許布爾運算符(&&, ||, !
)。
和你怎麼定義什麼是「惡意代碼」? – 2011-03-22 14:06:04
用戶無法使用瀏覽器控制檯並執行任何他想要的JS?或者我錯過了什麼? – 2011-03-22 14:06:15
嗯 - 這是正確的。然而,我的意思是,我希望能夠看到一個函數是否是布爾運算符('a && b || c')的組合或者它是包含AJAX調用等的東西。 – pimvdb 2011-03-22 14:08:53