2014-10-30 57 views
0

很多人似乎都在使用eval()的概念中大失所望。我完全理解隨之而來的XSS攻擊和安全問題。然而,使用eval()來解析從您自己的服務器通過HTTPS獲取的JSON文檔是否不好,並且該文檔會保證服務器有效,並且不包含用戶生成的數據?當你的數據源是安全的時候可以使用eval()嗎?

+4

只要你知道你在'eval'ing,唯一的問題可能是對性能的影響。 – 2014-10-30 19:18:58

+2

爲什麼不使用'JSON.parse()'?速度更快。 – SLaks 2014-10-30 19:19:49

+0

你可以'評估'它,但如果它是JSON爲什麼不使用更安全的'JSON.parse()'? – 2014-10-30 19:20:11

回答

3

正如其他人的評論說,使用JSON解析器(如JSON.parse(),內置於大多數瀏覽器)來解析JSON。雖然JSON與JavaScript兼容,但它不是一回事,而是服務於不同的目的。

我想你的問題更普遍的響應,因爲這是一個想法我看到很多人都因爲他們纔剛剛開始:

然而,這樣做不好使用eval()[...]不包含用戶生成的數據?

如果您正在編寫將數據從一個層傳輸到另一個層或從一個系統傳輸到另一個系統的代碼,那麼在正確封裝時發生這種情況絕對關鍵。你會發現自己的混合數據命令任何時候,你要特別小心,以使數據正確轉義,以便它是絕不含糊的,不能混淆的命令。

安全是不是唯一的問題,當談到注射。問題是否有人試圖利用它。你可能會有一些引用它的數據,或者你沒有想到的值。你的代碼應該像處理數據時那樣透明。例如,如果您正在編寫ORM,則該ORM不應以任何方式修改數據。它應該確保它可靠地結束在一個應有的位置。

我看到很多使用的數據在URL中所有的時間鄉親。有人將數字身份證號碼按原樣串聯到URL中是很常見的事情,而且無需轉義。我問他們......你確定你的ID永遠是一個數字,可能永遠不會包含保留的字符?如果某人想要在不同的環境中重新使用您的代碼,該怎麼辦?

的東西應該如何使用的假設往往是錯誤和安全漏洞,這實際上是同一個來源。

+0

你還應該提到反射JS編譯器的性能命中。 (+1) – Scimonster 2014-10-30 19:33:24

+0

@Scimonster性能與問題的核心無關。如果使用得當,JavaScript解釋器和JSON解析器是兩個完全不同的東西,看起來很相似。 – Brad 2014-10-30 19:34:22

相關問題