很多人似乎都在使用eval()的概念中大失所望。我完全理解隨之而來的XSS攻擊和安全問題。然而,使用eval()來解析從您自己的服務器通過HTTPS獲取的JSON文檔是否不好,並且該文檔會保證服務器有效,並且不包含用戶生成的數據?當你的數據源是安全的時候可以使用eval()嗎?
回答
正如其他人的評論說,使用JSON解析器(如JSON.parse()
,內置於大多數瀏覽器)來解析JSON。雖然JSON與JavaScript兼容,但它不是一回事,而是服務於不同的目的。
我想你的問題更普遍的響應,因爲這是一個想法我看到很多人都因爲他們纔剛剛開始:
然而,這樣做不好使用eval()[...]不包含用戶生成的數據?
如果您正在編寫將數據從一個層傳輸到另一個層或從一個系統傳輸到另一個系統的代碼,那麼在正確封裝時發生這種情況絕對關鍵。你會發現自己的混合數據與命令任何時候,你要特別小心,以使數據正確轉義,以便它是絕不含糊的,不能混淆的命令。
安全是不是唯一的問題,當談到注射。問題是否有人試圖利用它。你可能會有一些引用它的數據,或者你沒有想到的值。你的代碼應該像處理數據時那樣透明。例如,如果您正在編寫ORM,則該ORM不應以任何方式修改數據。它應該確保它可靠地結束在一個應有的位置。
我看到很多使用的數據在URL中所有的時間鄉親。有人將數字身份證號碼按原樣串聯到URL中是很常見的事情,而且無需轉義。我問他們......你確定你的ID永遠是一個數字,可能永遠不會包含保留的字符?如果某人想要在不同的環境中重新使用您的代碼,該怎麼辦?
的東西應該如何使用的假設往往是錯誤和安全漏洞,這實際上是同一個來源。
你還應該提到反射JS編譯器的性能命中。 (+1) – Scimonster 2014-10-30 19:33:24
@Scimonster性能與問題的核心無關。如果使用得當,JavaScript解釋器和JSON解析器是兩個完全不同的東西,看起來很相似。 – Brad 2014-10-30 19:34:22
- 1. 當你使用Nunit的時候,你可以使用哪個Claus
- 2. 當數據源可以更改時,我可以使用LINQ嗎?
- 3. 你什麼時候可以使用uint_least16_t
- 4. 什麼時候可以安全使用PHP strtolower()函數?
- 5. 什麼時候可以考慮使用危險的SetInnerHTML()安全?
- 6. 當SynchronizationContext.Current爲空時,我可以安全地使用Task.Wait嗎?
- 7. 你可以使用cocoapods安裝GeoFire嗎?
- 8. C#API可以充當數據源嗎?
- 9. 這是eval()在Python中安全嗎?
- 10. 發佈候選產品是否可以安全使用?
- 11. 什麼時候可以安全使用.toString()?
- 12. 什麼時候是絕對最新的,你可以調用Page.ClientScript.RegisterClientScriptBlock?
- 13. 是可以安全使用的ServletContext#getMimeType()
- 14. 是可以安全使用的DLL從
- 15. 你可以在「connectionDidFinishLoading」中設置tableView數據源的值嗎?
- 16. 當你使用多線程和只有getter的時候,你需要你的屬性是Atomic嗎?
- 17. 這是一個安全使用python eval()嗎?
- 18. ngx.shared.DICT可以安全使用嗎?
- 19. JDK7現在可以安全使用嗎?
- 20. AesCryptoServiceProvider.GenerateKey可以安全使用嗎?
- 21. 可以安全使用dompdf + file_get_contents嗎?
- 22. Malloc可以安全地使用nogil嗎?
- 23. scrapy.conf可以安全使用嗎?
- 24. nodejs'util'有時候是全局的嗎?
- 25. 當你調用成員函數時,你可以調用friend函數嗎?
- 26. 你可以告訴什麼時候數據被插入到表
- 27. PHP可以安全地使用unix時間戳來查詢mysql數據庫嗎?
- 28. 使用JavaScript的eval生成的函數可以優化嗎?
- 29. 你可以使用類對象的數據綁定嗎?
- 30. 你可以在android的網站上使用數據庫嗎?
只要你知道你在'eval'ing,唯一的問題可能是對性能的影響。 – 2014-10-30 19:18:58
爲什麼不使用'JSON.parse()'?速度更快。 – SLaks 2014-10-30 19:19:49
你可以'評估'它,但如果它是JSON爲什麼不使用更安全的'JSON.parse()'? – 2014-10-30 19:20:11