我正在寻找一种简单而安全的方式来解析一个地图,并从一个不受信任的源提供的字符串中只有一个地图。地图包含关键字和数字。使用read
来做这件事有什么安全隐患?安全地解析clojure的地图
3
A
回答
5
read
默认情况下完全不安全,它允许任意代码执行。以(read-string "#=(println \"hello\")")
为例。
您可以通过将*read-eval*
设置为false来使其更安全。如果使用#=
表示法,这将导致异常被触发。例如:
(binding [*read-eval* false] (read-string "#=(println \"hello\")"))
最后,这取决于你如何使用它有通过提供大量的关键字服务攻击的潜在的拒绝(:FOO,:巴)。关键字被拦截,永远不会被释放,所以如果使用了足够的内存,进程将会耗尽内存。在clojure-dev列表上有关于这个的some discussion。
2
如果你想要安全,我认为你基本上需要手动解析它,而不进行评估。这里是一种方式的例子来做到这一点:
(apply hash-map
(map #(%1 %2)
(cycle [#(keyword (apply str (drop 1 %)))
#(Integer/parseInt %)])
(string/split ":a 23 :b 32 :c 32" #" ")))
根据类型的数字要支持,你要多少错误检查,你会希望修改正在循环在两个功能将每个地图的每个其他值处理为关键字或数字。
相关问题
- 1. lodash的_.parseInt如何在地图上安全地解析
- 2. 如何安全地解析字符串?
- 3. SymPy:安全地解析字符串
- 4. Clojure clj-time:解析本地字符串
- 5. 用GSON解析地图的JSON地图
- 6. Clojure - 地图值
- 7. 解析URL查询字符串成一个Clojure的地图
- 8. 的Clojure从地图
- 9. Clojure的地图解构一个键
- 10. Clojure的隐含地图解释
- 11. 在clojure中设置地图的地图
- 12. Clojure的(图)在地图键
- 13. 解构Clojure中 - 嵌入式地图
- 14. 源地图安全性
- 15. 安全地上传图片
- 16. 如何安全地解析通过websockets传来的json对象?
- 17. SOM地图全面了解
- 18. 解析谷歌地图API
- 19. 解析.gz站点地图
- 20. 解析地图文件?
- 21. 解析串入地图Golang
- 22. Javascript解析与Bing地图
- 23. 安全地上传数据到分析
- 24. Java类到Clojure的地图
- 25. clojure中的双向地图?
- 26. clojure地图的默认值
- 27. 的Clojure:添加到地图
- 28. Clojure的地图筑巢
- 29. Clojure的地图卷起
- 30. 在解析安全